一蠕蟲在深 n 寸的井底,每分鐘上爬 u 寸,下一分鐘下滑 d 寸,交替進行。問幾分鐘能爬出井口?
#include <stdio.h>
int main(void) {
int n, u, d;
scanf("%d %d %d", &n, &u, &d);
int time = 0, distance = 0;
do {
time++;
if (time % 2 != 0) // 奇數分鐘:上爬
distance += u;
else // 偶數分鐘:下滑
distance -= d;
} while (distance < n);
printf("%d\n", time);
return 0;
}
若 n 極大(如 10^9),模擬會超時。可用數學公式:
// 優化版 O(1) 算法
if (u >= n) { printf("1\n"); return 0; }
int net = u - d;
int k = (n - u + net - 1) / net; // 向上取整
printf("%d\n", 2 * k + 1);