这道题很简单啊,但是因为粗心大意,竟然都使用了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;
}