题目大意:给出 H 井高,U 上爬距离,D 下滑距离,F 减少百分数。第一天爬 U,第二天比前一天减少 F%,每晚下滑 D,问成功(总爬行距离大于 H)或失败(距离小于 0)在第几天。
解题思路:模拟每天上爬和下滑,记录天数,每次距离变化后就判断,及时退出。第一天的模拟也要放在模拟过程循环内,因为放在 while 外面 WA 了好几次。
#include<iostream>
#include<cstdio>
#include<string.h>
#include<stdlib.h>
#include<cmath>
using namespace std;
int main() {
int H, U, D, F;
while(scanf("%d%d%d%d", &H, &U, &D, &F) != EOF && H) {
int day = 1;
double inh = 0, cli = U, aftc = 0, afts = 0;
while(1) {
inh = afts;
aftc = inh + cli;
if(aftc > H) break;
afts = aftc - D;
if(afts < 0) break;
day++;
cli = cli - U * F * 0.01;
if(cli < 0) cli = 0;
}
if(aftc > H) printf("success on day %d\n", day);
else printf("failure on day %d\n", day);
}
return 0;
}