题目如下:
坚持不懈的蜗牛(SNAIL)
题目ID:1501 100分
时间限制: 1000ms
空间限制: 65536kB
现在有一只蜗牛,掉入一个6米深的井底,它想爬到井口上面去。蜗牛在第一天的白天能爬3米,但在每天夜晚由于睡觉,它会滑落1米。又由于疲劳因素,以后每个白天它所能爬的高度以第一天爬的高度10%递减,也就是说,下一天比前一天要少爬0.3米。那么蜗牛哪一天才能爬到井口上去呢?在下表中你会看到,蜗牛在第三天爬到井口。
天数 每天初始高度 每天所爬高度 白天到达高度 夜间滑落后高度
1 0 3 3 2
2 2 2.7 4.7 3.7
3 3.7 2.4 6.1 –
问题求解:
你现在要将这个问题一般化。给定不同的参数,最后的结果可能有两种:爬到井口或跌落到井底(注意爬到井口是指青蛙爬的高度大于井口高度,跌倒井底是指青蛙滑落至高度小于0)。你需要计算的是,最终结果如何,以及这个结果发生在哪一天。
输入格式:
输入文件中可包含多个事件,每一行中输入一次事件的4个参数。这四个数分别是:H、U、D、F,参数之间用空格隔开。其中H为井的深度,U是蜗牛在第一天的白天能爬的高度,D是蜗牛每天晚上要滑落的高度,F是疲劳因子(用百分数的形式表示,如30表示为30%)。蜗牛所爬的高度不能为负数,假若由于疲劳因素,我们算出蜗牛该天到达的高度为负,那么认为蜗牛当天根本没有爬。不管蜗牛白天爬多高,它每天晚上都会滑落D米。如果一行四个数都为0,则表示结束。
输出格式:
对于输入中的每个事件(每一行),程序输出一行与之对应。输出结果包括蜗牛是否成功到达要求高度,以及到达该高度的天数。
样例输入:
6 3 1 10
10 2 1 50
50 5 3 14
50 6 4 1
50 6 3 1
0 0 0 0
样例输出:
SUCCESS ON DAY 3
FAILURE ON DAY 4
FAILURE ON DAY 7
FAILURE ON DAY 68
SUCCESS ON DAY 20
时间限制:
1000
空间限制:
65536
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
while(1){
double a,b,c,d,e=0;
int t=1;
cin>>a>>b>>c>>d;
int f=b;
if(a==0&&b==0&&c==0&&d==0) break;
e+=b;
b-=f/100*c;
while(e>0&&e<a){
e+=b;
b-=b/100*d;
if(b<0) b=0;
e-=c;
t++;
}
if(e<=0) printf("FAILURE ON DAY %d\n",t);
else printf("SUCCESS ON DAY %d\n",t);
}
return 0;
}
求助!