二分法试题
程序员文章站
2022-06-03 13:58:26
...
洛谷:P1024 一元三次方程求解
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
double a,b,c,d;
int s=0;
double Count(double n)//判断函数,方便简洁。
{
return a*n*n*n+b*n*n+c*n+d;
}
int main()
{
cin>>a>>b>>c>>d;
for(double i=-100;i<100;i++)
{
double l=i;
double r=i+1;
if(Count(l)==0)//这是当答案是整数的时候,
{
printf("%.2lf ",l);
s++;
}
if(Count(r)*Count(l)<0)//这里是判断当函数是小数的时候。
{
while(r-l>=0.001)//这里一定要有等于号,这里也一定要是0.001,
//因为要保存2位小数,因此当差是3位小数的时候,就不需要判断了。
//这样写就保证了r与l的差值小数点第三位一直是0,
//因此在最后选结果的时候选r或l都行,因为小数点第三位都是小于4.不影响结果。
//所以以后这样的二分法,最后选取结果一定要想想怎么写判断循环结束,和怎么选取结果。
{
double mid=(r-l)/2+l;
// if(Count(mid)=0)
// {
// s++;
// printf("%.2lf ",mid);
// }
if(Count(mid)*Count(l)>0)
l=mid;
else
r=mid;
}
printf("%.2lf ",r);
s++;
}
if(s==3)
break;
}
return 0;
}