P1423 小玉在游泳
解题思路
这道题是一个典型的模拟问题。我们需要模拟小玉游泳的过程,直到累积游过的距离达到或超过目标距离 \(s\)。
- 初始状态:第一步能游 \(2\) 米,目前游的总距离为 \(0\)。
- 循环条件:只要目前游的总距离小于目标距离 \(s\),就继续游下一步。
- 步数更新:
- 将当前的单步距离加到总距离中。
- 步数计数器加 \(1\)。
- 计算下一步的单步距离(当前距离 \(\times\) \(0.98\))。
代码实现
#include <iostream>
using namespace std;
int main() {
double s; // 目标距离
cin >> s;
double sum = 0.0; // 当前游过的总距离
double step = 2.0; // 当前这一步能游的距离
int count = 0; // 步数计数器
// 当总距离还没达到目标 s 时,继续游
while (sum < s) {
sum += step; // 累加距离
step *= 0.98; // 下一步的力气衰减为 98%
count++; // 步数 +1
}
cout << count << endl;
return 0;
}
核心要点
- 数据类型:由于涉及小数运算(距离 \(s\) 和比例 \(98\%\)),变量应使用
double类型。 - 循环逻辑:使用
while循环最合适,因为我们预先不知道要游多少步,只知道终止条件(总距离 \(\ge s\))。 - 衰减计算:每一步游完后,记得更新下一步的距离
step = step * 0.98。

浙公网安备 33010602011771号