Python程式:查詢移除石子後的最大得分


假設我們有三個值 a、b 和 c。我們正在玩一個單人紙牌遊戲,有三堆石子,其大小分別為 a、b 和 c。每回合,玩家選擇兩堆不同的非空石子堆,從每堆中取走一塊石子,並將 1 分新增到他的得分中。當剩餘的非空石子堆少於兩堆時,遊戲結束。因此,我們必須找到您可以獲得的最大得分。

因此,如果輸入類似於 a = 4、b = 4、c = 6,則輸出將為 7,因為初始狀態為 (4, 4, 6),然後我們可以按照以下步驟進行:

  • 從第 1 堆和第 2 堆中選擇,因此當前狀態為 (3, 3, 6)

  • 從第 1 堆和第 3 堆中選擇,因此當前狀態為 (2, 3, 5)

  • 從第 1 堆和第 3 堆中選擇,因此當前狀態為 (1, 3, 4)

  • 從第 1 堆和第 3 堆中選擇,因此當前狀態為 (0, 3, 3)

  • 從第 2 堆和第 3 堆中選擇,因此當前狀態為 (0, 2, 2)

  • 從第 2 堆和第 3 堆中選擇,因此當前狀態為 (0, 1, 1)

  • 從第 2 堆和第 3 堆中選擇,因此當前狀態為 (0, 0, 0)

最後,非空石子堆少於兩堆,因此遊戲結束。

為了解決這個問題,我們將遵循以下步驟:

  • minimum := a、b 和 c 的最小值

  • maximum := a、b 和 c 的最大值

  • left := a + b + c - maximum - minimum

  • 如果 maximum-left <= minimum,則

    • 返回 minimum + left - (1 + minimum - (maximum-left))/2 的商

  • 返回 minimum + (maximum-minimum 和 left 的最小值)

示例

讓我們看看以下實現以獲得更好的理解:

def solve(a, b, c):
   minimum = min(a,b,c)
   maximum = max(a,b,c)
   left = a+b+c-maximum-minimum
   if maximum-left<=minimum:
      return minimum + left-(1+minimum-(maximum-left))//2
   return minimum + min(maximum-minimum,left)

a = 4
b = 4
c = 6
print(solve(a, b, c))

輸入

4, 4, 6

輸出

7

更新於: 2021年10月6日

340 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告