题目链接:P1024 [NOIP2001 提高组] 一元三次方程求解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
代码:
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,ans;
double f(double x){
return a*pow(x,3)+b*pow(x,2)+c*x+d;
}
bool check(double x,double r){
return f(x)*f(r)<=0;
}
void solve(int x){
double l=x,r=x+1;
while(r-l>0.001){
double mid=(r+l)/2;
if(check(mid,r))l=mid;
else r=mid;
}
printf("%.2lf ",l);
}
int main(){
cin>>a>>b>>c>>d;
for(int i=-100;i<100;i++){
if(!f(i))continue;
if(f(i)*f(i+1)<=0){
++ans;solve(i);
}
if(ans==3)return 0;
}
}