题解 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;//结尾
}