P1423 小玉在游泳

解题思路

这道题是一个典型的模拟问题。我们需要模拟小玉游泳的过程,直到累积游过的距离达到或超过目标距离 \(s\)

  1. 初始状态:第一步能游 \(2\) 米,目前游的总距离为 \(0\)
  2. 循环条件:只要目前游的总距离小于目标距离 \(s\),就继续游下一步。
  3. 步数更新
    • 将当前的单步距离加到总距离中。
    • 步数计数器加 \(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
posted @ 2026-01-26 21:47  张一信奥  阅读(0)  评论(0)    收藏  举报