题目链接:https://www.luogu.com.cn/problem/P1024

大意就是给出一个一元三次方程abcd,保证有三个解且解在-100 - 100之间

然后求出这三个解

这是一个二分的题,不过涉及到一些数学问题。

,,,如果将x代入后的两个方程表达式异号,说明中间有解。

根据这个性质,如果代入后的l和r的式子结果异号,那么有解。
如果满足性质,那么我们二分l 和 r

如果m和r异号,说明在右半边,否则在左半边。
code:

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
double js(double x){
	return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
	cin>>a>>b>>c>>d;
	int sum =0;
	for(int i=-100;i<=100;i++){
		double l=i,r=i+1;
		double x1 = js(l);
		double x2 = js(r);
		if(x1==0){
			printf("%.2lf ",l);
			sum++;
		}
		if(x1*x2<0){
			while(r-l>=0.001){
				double m = (l+r)/2;
				if(js(m)*js(r)<=0) l=m;
				else r=m;
			}
			printf("%.2lf ",r);
			sum++;
		}
		if(sum==3)	break;
	}
}