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

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 13: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月21日
  • 已采纳回答 10月14日
  • 创建了问题 10月13日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部