1. [2001年NOIP提高组] 一元三次方程求解

1. [2001年NOIP提高组] 一元三次方程求解

思路:暴力枚举法

在根的范围里从小到大枚举x的范围(因为x要精确到小数点后2位,所以我们枚举的时候就直接精确到后三位)

若存在两个数x1,x2且x1<x2,f(x1)*f(x2)<0 则方程解肯定在x1~x2范围内 基本数学原理

取x1.x2的均值到小数点后两位就可以看做是x的值啦~

另外可以进行适当的优化,如果已经求出三个x来,就可以跳出循环了。

代码如下:

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
int main()
{
int sum=0;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
for(double i=-100;i<=100;i+=0.001)
{
double j=i+0.001;
double y1=a*i*i*i+b*i*i+c*i+d;
double y2=a*j*j*j+b*j*j+c*j+d;
if((y1>=0&&y2<=0)||(y1<=0&&y2>=0))
{
double x=(i+j)/2;
printf("%.2lf ",x);
sum++;
if(sum==3)
break;
}
}
return 0;
}

暴力出奇迹(好耶!)

 

posted @ 2022-10-17 09:27  shanyingrui  阅读(49)  评论(0编辑  收藏  举报