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
廣告