社区讨论

陷入误区了 急需大佬们的help!

P1024[NOIP 2001 提高组] 一元三次方程求解参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lrcc3oyp
此快照首次捕获于
2024/01/14 01:21
2 年前
此快照最后确认于
2024/01/14 11:16
2 年前
查看原帖
CPP
double a,b,c,d;
double fun(double x)
{
	return a*x*x*x+b*x*x+c*x+d;
};
int main()
{
	double l,r,mid,llim,rlim;
	int i,res=0;
	cin>>a>>b>>c>>d;
	for(i=-100;i<101;i++)
	{
		l=i;
		r=i+1;
		llim=fun(l);
		rlim=fun(r);
		if(llim==0)
		{
			printf("%0.2lf ",l);
			res++;
		}
		if(llim*rlim<0)
		{
			while(r-l>1e-5)
			{
				mid=(l+r)/2;
				if(fun(mid)>0.0) r=mid;
				else l=mid;
			}
			printf("%.2lf ",l);
			res++;
		}
		if(res==3) return 0;
	}
	return 0;
}
样例1 -4.65 2.25 1.4 当我写成if(fun(mid)>0.0) r=mid;时,我的第二个答案是0.00.但这不是关键,关键是我进行调试当l=0时,r是等于1的,但是rlim竟然不等于0,而是-4.4几,这是为什么?
/*if(fun(mid)fun(r)>0.0) r=mid;改成这个就ac了,但是这不是关键,关键是对样例r=1时,rlim竟然不等于0!/

回复

2 条回复,欢迎继续交流。

正在加载回复...