1、本题WA了2次,主要原因可能是浮点数误差。刚开始,我是每次将百分比改变,再将u乘以改变后的百分比,这样误差就大了。后来改为先算出下降高度,每次再减去下降高度,这样误差就小(不涉及乘除了,而且每次减去的是定值)。
2、浮点数的误差要注意。
#include <stdio.h>
int main(void)
{
double p,x,h,u,d,f,temp,down;
int day;
while(scanf("%lf%lf%lf%lf",&h,&u,&d,&f)==4)
{
if(h==0) break;
day=1;
down=u*(((double)f)/100);
x=0.0;
while(1)
{
x+=u;
if(x>h)
{
printf("success on day %d\n",day);
break;
}
x-=d;
if(x<0.0)
{
printf("failure on day %d\n",day);
break;
}
u-=down;
if(u<0.0) u=0.0;
day++;
}
}
return 0;
}