首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

演算法題:礦泉水換購問題(空瓶換飲料)

     編輯:程式設計疑難解答

經典演算法題:給定初始購買 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) = 3
  • n=5, m=4 → 5 + (4)/(3) = 6

此公式適用於極大數值,無需模擬迴圈,效能極佳。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved