题解 P1024 【一元三次方程求解】

· · 题解

一道典型的分治题目(水题)

这里就不用重复的算法的

提供一个易懂的奇葩代码

瞎扯。。乱枚。。适合新手理解。

下面放代码

#include<bits/stdc++.h>
using namespace std;
double x=-100,l=0.01;//枚举x,循环每次加上l;
double a,b,c,d;//输入数据也有实数,我被样例坑了一次WA。
int s;//记录根的个数
int main()
{
    cin>>a>>b>>c>>d;
    for(;x<=100;x=x+l)//枚举循环
    {
        double y1=a*(x*x*x),y2=b*(x*x),y3=c*x;//把方程拆开分成y1,y2,y3,d四个项再相加即可求方程结果
        float z=(float)y1+(float)y2+(float)y3+(float)d;//计算方程式的结果z。
        if(abs(z-0)<=0.01) {printf("%.2lf ",x);s++;}//因为精度不稳定,所以只要方程结果的绝对值与0的差够小就行。
        if(s==3) break;//节约时间,求出三个根就溜。
    }
    return 0;//结尾
}