【深基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;
}