- 枚举区间,区间内做二分,WA了第三个点,求大佬帮忙qwq
#include <iostream>
#include <algorithm>
using namespace std;
double a,b,c,d;
inline double f(double x){
return a*x*x*x+b*x*x+c*x+d;
}
int main(){
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
//枚举每一个区间
for(int i=-3;i<=100;i++){
double l=i;
double r=i+1;
double fl=f(l);
double fr=f(r);
//区间内没有解
//左端点值为0
if(fl==0){
//cout << i << endl;
printf("%.2f ",l);
continue;
}
// 右端点不输出,因为会和循环i+1重复
// 解在区间i,i+1中,二分求解
if(fl*fr>=0) continue;//注意,需要包含等于0的情况:用于去重
while(r-l>1e-4){
double mid=(l+r)/2;
if(f(mid)*f(r)<=0){
l=mid;
}else{
r=mid;
}
}
//cout << i << endl;
printf("%.2f ",r);
}
return 0;
}