题目描述
# T287466 05-29-C03-爬动的蠕虫(L3)
## 题目描述
一只1英寸长的蠕虫在一口深为n英寸的井的底部。每分钟蠕虫可以向上爬u英寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了d英寸。上爬和下滑重复进行。蠕虫需要多长时间才能爬出井?不足一分钟按一分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
## 输入格式
输入数据占一行,为3个正整数n,u,d,其中n是井的深度,u是蠕虫每分钟上爬的距离,d是蠕虫在休息的过程中下滑的距离。
## 输出格式
输出占一行,如果蠕虫能爬出井,则输出一个整数,表示蠕虫爬出井所需的时间(分钟);如果不能爬出井,则输出“The worm cannot climb out of the well.”。
## 输入输出样例 #1
### 输入 #1
```
10 2 1
```
### 输出 #1
```
17
```
## 输入输出样例 #2
### 输入 #2
```
20 1 3
```
### 输出 #2
```
The worm cannot climb out of the well.
```
## 说明/提示
### 数据规模与约定:
对100%的数据,0<n<100,0<d<n,0<u<n。
### 本题出处
本题源自以下教材的编程习题:王桂平, 周祖松, 穆云波, 葛昌威编著. C++趣味编程及算法入门. 北京大学出版社, 2024年出版.
一、明确需求
- 输入井的深度n、蠕虫每分钟上爬距离u、休息时下滑距离d。
- 若蠕虫能爬出井,输出所需时间(分钟);若不能,输出 “The worm cannot climb out of the well.”。
- 蠕虫只要在某次上爬过程中头部到达井口(高度\(\geq n\)),就完成任务。
二、设计思路
- 特殊情况判断:若\(u \leq d\),蠕虫上爬后下滑,高度无法持续增加,必然爬不出,直接输出对应提示。
- 模拟爬动过程:当\(u > d\)时,模拟蠕虫 “上爬一分钟 + 休息下滑一分钟” 的循环,直到爬出井口。需记录当前高度与时间,每次上爬后检查是否爬出。
三、代码实现步骤(C++)
步骤 1:引入头文件与命名空间
使用#include<bits/stdc++.h>包含常用标准库,using namespace std;简化输入输出操作(无需每次写std::)。
cpp
运行
#include<bits/stdc++.h>
using namespace std;
步骤 2:编写主函数main
程序从main函数开始执行,所有逻辑在此实现。
cpp
运行
int main() {
// 后续代码写在这里
return 0; // 程序正常结束
}
步骤 3:输入数据
读取井深n、上爬距离u、下滑距离d。
cpp
运行
int n, u, d;
cin >> n >> u >> d;
步骤 4:处理爬不出的情况
若\(u \leq d\),直接输出提示并结束程序。
cpp
运行
if (u <= d) {
cout << "The worm cannot climb out of the well." << endl;
return 0;
}
步骤 5:模拟爬动过程
定义变量j记录当前高度,te记录时间,循环模拟 “上爬 + 检查 + 下滑” 过程。
cpp
运行
int j = 0, te = 0;
while (true) {
// 上爬一分钟
j += u;
te++;
// 检查是否爬出
if (j >= n) {
cout << te;
return 0;
}
// 休息下滑一分钟
j -= d;
te++;
}
四、完整代码
cpp
运行
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, u, d;
cin >> n >> u >> d;
if (u <= d) {
cout << "The worm cannot climb out of the well." << endl;
return 0;
}
int j = 0, te = 0;
while (true) {
j += u;
te++;
if (j >= n) {
cout << te;
return 0;
}
j -= d;
te++;
}
return 0;
}
五、测试示例
测试 1:能爬出
输入:
plaintext
10 2 1
模拟过程(关键步骤):
- 多次 “上爬2→下滑1” 后,第17分钟上爬时,高度达到10,输出
17,与样例一致。
测试 2:爬不出
输入:
plaintext
20 1 3
因\(u=1 \leq d=3\),直接输出 “The worm cannot climb out of the well.”,与样例一致。
大家还可以在我的bilibili(编程题小白日记)搜索 ···0052.爬动的蠕虫··· 找到这道题的视频解析
蠕虫爬井问题求解
370

被折叠的 条评论
为什么被折叠?



