主要思路:由于根与根之差的绝对值>=1,所以在单位唯一的区间内至多只有一个根。使用零点存在性定理,定义左端点left和right,若f(left)*f(right)<=0,则在区间内必有根,然后再在区间内使用二分来确定根的精度。
代码如下:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
using namespace std;
double a,b,c,d;
int calculate(double x){
return a*pow(x,3)+b*pow(x,2)+c*x+d; //计算f(x)
}
int main()
{
cin>>a>>b>>c>>d;
double left,right,mid,yl,yr;
for(int i=-100;i<=100;++i){
left=i; right=i+1;
yl=calculate(left);
yr=calculate(right);
if(!yl){
cout<<fixed<<setprecision(2)<<left<<" "; //若yl==0,则对应的x=left即为方程的一个根
}
if(yl*yr<0){
while(right-left>0){
mid=(left+right)/2;
if(calculate(mid)<0) left=mid;
else if(calculate(mid)>0) right=mid;
else cout<<fixed<<setprecision(2)<<mid<<" ";
}
}
}
return 0;
}
搜索
复制
标签:right,T232071,calculate,int,mid,yl,w7,解方程,left From: https://www.cnblogs.com/ruiyifei/p/17321221.html