[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;

}

posted @ 2022-08-14 08:49  shanyingrui  阅读(113)  评论(0编辑  收藏  举报