头像

欢迎来到我的博客

分享题解与总结

P1024一元三次方程求解

image

思路:

1.[-100,100]的枚举左端点

2.如果左右端点的函数值乘积小于0,说明[l,r]内有根,进行二分

3.向左找

4.当集齐3个答案之后,输出

#define EPI 1e-4
double a,b,c,d,x[5];//x[idx]
double l,r,mid,mvalue;//mid-value
int idx;//记录答案的x数组的下标 

double f(double x)
{
	return a*x*x*x+b*x*x+c*x+d;
}

int main()
{
	cin>>a>>b>>c>>d;
	for(l=-100;l<=100&&idx<3;++l)
	{
		r=l+1;
		if(f(l)==0)
		{
			x[++idx]=l;
			continue;
		}
		if(f(l)*f(r)<0){//向左找 
			while((r-l)>EPI)
			{
				mid=(l+r)/2;
				mvalue=f(mid);
				if(f(l)*mvalue<0)
					r=mid;
				else
					l=mid;
			}
			x[++idx]=l;
		}
	}
	sort(x+1,x+idx+1);
	for(int i=1;i<=idx;++i)
		printf("%.2lf ",x[i]);
	return 0;
}
posted @ 2026-02-10 20:08  king_steph1209  阅读(11)  评论(0)    收藏  举报