【深基4.习2】小玉在游泳 · 教师题解

【深基4.习2】小玉在游泳

解题思路

维护已游总距离与下一步距离,初始为 0 和 2。总距离未达到 s 时再游一步,之后步长乘 0.98。

正确性说明

第 k 步的距离按递推等于上一部的 98%,循环精确模拟游泳过程,首次达到目标的步数就是最少步数。

易错点

目标为 0 时不需要游,输出 0;不要把 98% 写成整数除法。

复杂度

设答案为 k,时间 O(k),空间 O(1)。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    double s;
    cin >> s;
    double sum = 0, step = 2;
    int k = 0;
    while (sum < s) {
        sum += step;
        step *= 0.98;
        k++;
    }
    cout << k << "\n";
    return 0;
}
返回题目