社区讨论
陷入误区了 急需大佬们的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 条回复,欢迎继续交流。
正在加载回复...