兼爱非攻99 2022-10-13 21:02 采纳率: 100%
浏览 17
已结题

P1024 [NOIP2001 提高组] 一元三次方程求解

题目描述
有形如:a x^3 + b x^2 + c x + d = 0ax
3
+bx
2
+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,da,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在 -100−100 至 100100 之间),且根与根之差的绝对值 \ge 1≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后 22 位。

提示:记方程 f(x) = 0f(x)=0,若存在 22 个数 x_1x
1

和 x_2x
2

,且 x_1 < x_2x
1

<x
2

,f(x_1) \times f(x_2) < 0f(x
1

)×f(x
2

)<0,则在 (x_1, x_2)(x
1

,x
2

) 之间一定有一个根。

  • 写回答

1条回答 默认 最新

  • ZQ2579 2022-10-13 21:39
    关注
    #include <iostream>
    #include <cmath>
    #include <iomanip>
    using namespace std;
    int main(){
         double a , b , c , d;
         double e , f , g , h;
         double num1,num2,num3;
         cin >> a >> b >> c >> d;
         e = b * b - 3 * a * c;
         f = b * c - 9 * a * d;
         g = (2 * e * b - 3 * a * f) / (2 * sqrt(e * e * e));
         h = acos(g);
         num1 = (-b - 2 * sqrt(e) * cos(h / 3))/(3 * a);
         num2 = (-b + sqrt(e) * (cos(h / 3)+sqrt(3) * sin(h/3))) / (3 * a);
         num3 = (-b + sqrt(e) * (cos(h/3) - sqrt(3) * sin(h/3))) / (3 * a);
         cout << fixed << setprecision(2) << num1 << " ";
         cout << fixed << setprecision(2) <<num3 << " ";
         cout << fixed << setprecision(2) <<num2 << " ";
         return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月22日
  • 已采纳回答 10月14日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function