經典演算法題:給定初始購買 n 瓶礦泉水,m 個空瓶可換 1 瓶新飲料,求最多能喝多少瓶。輸入多組測資,n, m ≤ 2×10⁹,需 O(1) 或 O(log n) 解法。
每喝完 1 瓶得 1 空瓶,換購本質是用 m-1 個空瓶換 1 瓶飲料(因換來的飲料喝完又產生 1 空瓶)。總飲用量 = n + (n-1)/(m-1)(整數除法)。
long solve(long n, long m) {
if (m <= 1) return n; // 避免除零
return n + (n - 1) / (m - 1);
}
n=2, m=2 → 2 + (1)/(1) = 3n=5, m=4 → 5 + (4)/(3) = 6此公式適用於極大數值,無需模擬迴圈,效能極佳。