这道题很简单啊,但是因为粗心大意,竟然都使用了int,犯了超级低级的错误,其他就是注意失败的多种情况~
Description
蜗牛在6英尺深的井底,想爬到山顶。蜗牛在太阳升起时可以爬3英尺,但在晚上睡觉时可以滑下1英尺。蜗牛的疲劳因子为10%,这意味着蜗牛每连续一天的攀爬比前一天少10%* 3 = 0.3英尺。(由于疲劳而损失的距离始终是第一天攀爬距离的10%。)蜗牛在哪一天离开井,即蜗牛的高度超过6英尺的第一天是哪一天?(一天包括一段阳光,然后是一段黑暗。)从下表中可以看到,蜗牛在第三天离开井。
日初始高度距离爬升后的爬升高度滑动后的爬升高度
1 0 3 3 2
2 2 2.7 4.7 3.7
3 3.7 2.4 6.1-
您的工作通常是解决此问题。根据问题的参数,蜗牛最终将离开孔或滑回到孔的底部。(换句话说,蜗牛的高度将超过孔的高度或变为负数。)您必须找出哪个首先发生以及在哪一天发生。
Input
输入文件包含一个或多个测试用例,每个单独用一行。每行包含四个整数H,U,D和F,以单个空格分隔。如果H = 0,则表示输入结束;否则,输入0。否则,所有四个数字都将在1到100之间(包括1和100)。H是井的高度(以英尺为单位),U是蜗牛在白天可以爬升的距离(以英尺为单位),D是蜗牛在夜间向下滑动的距离(以英尺为单位),F是疲劳系数,表示为百分比。蜗牛永远不会爬负距离。如果疲劳因子将蜗牛的爬升距离降低到零以下,则蜗牛整天都不会爬升。不管蜗牛爬了多远,它始终在晚上滑动D脚。
Output
对于每个测试用例,输出一行以指示蜗牛是成功(离开孔)还是失败(滑动回到底部)以及在哪一天。完全按照示例所示格式化输出。
SampleInput
6 3 1 10
10 2 1 50
50 5 3 14
50 6 4 1
50 6 3 1
1 1 1 1
0 0 0 0
sampleOutput
success on day 3
failure on day 4
failure on day 7
failure on day 68
success on day 20
failure on day 2
AC的代码:
#include<iostream>
using namespace std;
int main(){
int deep,height,fall,factor;
float today,sum;
while(cin>>deep>>height>>fall>>factor&&deep+height+fall+factor!=0){
sum=0;today=0;
float fac=factor/100.0;
fac=fac*height;
//
for(int i=1;;i++){
if(i==1){
today=height;
sum+=today;
if(sum>deep){
cout<<"success on day "<<i<<endl;
break;
}
if(sum<fall){
cout<<"failure on day "<<i<<endl;
break;
}
sum-=fall;
}
else{
if(sum<=0){
cout<<"failure on day "<<i<<endl;
break;
}
today-=fac;
sum+=today;
if(sum>deep){
cout<<"success on day "<<i<<endl;
break;
}
if(sum<fall){
cout<<"failure on day "<<i<<endl;
break;
}
sum-=fall;
}
}
}
return 0;
}