[NOIP2001 提高组] 一元三次方程求解
[NOIP2001 提高组] 一元三次方程求解
思路:本题运用暴力枚举法。为了便于求解,设根的值域(-100至100之间)中有i, i.j间的距离(0.001)满足精度要求(精确到小数点后2位)。
分析:本题说明方程 f(x) = 0f(x)=0,若存在 2 个数 x1 和 x2,且 x1<x2,f(x1)×f(x2)<0,则在(x1,x2) 之间一定有一个根。
代码如下:
#include<cstdio>
using namespace std;
int main()
{
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for(double i=-100;i<=100;i+=0.001)
{
double j=i+0.001;
double x1=a*i*i*i+b*i*i+c*i+d;//f(x1)
double x2=a*j*j*j+b*j*j+c*j+d;//f(x2)
if(x1*x2<0)//函数值异号
{
double ans=(i+j)/2;
printf("%.2lf ",ans);
}
}
return 0;
}