题目链接:7-17 爬动的蠕虫
一. 题目
1. 题目
2. 输入输出样例
3. 限制
二、代码
1. 代码实现
#include <stdio.h>
int main(void) {
unsigned int n, u, d;
unsigned int minute, high;
if (scanf("%d %d %d", &n, &u, &d) != 3) {
return -1;
}
high = u; //先上爬u
minute = 1; //耗时1分钟
while (high < n) {
high += u - d; // 先滑落d, 再上爬u, 即 high = high - d + u
minute += 2; // 下落1分种,上爬1分钟,共2分钟
}
printf ("%d\n", minute);
return 0;
}
2. 提交结果
三、总结
- 先爬1分钟,再采用先下落后上爬的方式,从而满足只要头部到达顶部就结束的要求
- 蠕虫的长度没有用
四、拓展
1. 条件改变
不对分钟进行取整,精确到小数点后2位
2. 代码实现
#include <stdio.h>
int main(void) {
unsigned int n, u, d;
unsigned int high;
float minute;
if (scanf("%d %d %d", &n, &u, &d) != 3) {
return -1;
}
high = u; //先上爬u
minute = 1; //耗时1分钟
while (high < n) {
high += u - d; // 先滑落d, 再上爬u, 即 high = high - d + u
minute += 2; // 下落1分种,上爬1分钟,共2分钟
}
if (high > n) {
minute -= (high - n) * 1.0 / u; // 减掉多爬的时长
}
printf ("%.2f\n", minute);
return 0;
}