Python石頭遊戲獲勝者程式
假設Amal和Bimal正在玩一個遊戲,Amal先走。遊戲規則如下:
一堆石頭,共有n塊。每個玩家可以從堆中拿走一塊石頭,並根據石頭的順序獲得分數。Amal和Bimal對石頭的估值可能不同。
我們有兩個長度相同的陣列,A_Values和B_Values。每個A_Values[i]和B_Values[i]分別表示Amal和Bimal對第i塊石頭的估值。分數最高者獲勝,如果分數相同則平局。雙方都會採取最佳策略,並且雙方都知道對方的估值。如果Amal獲勝,返回1;如果Bimal獲勝,返回-1;如果平局,返回0。
例如,如果輸入是A_Values = [2,4] B_Values = [3,5],則輸出為1,因為Amal會選擇第二塊石頭(分數為4),Bimal只能選擇第一塊石頭(分數為3),Amal分數更高,所以Amal獲勝。
解決方法:
- n := A_Values的長度
- combinedValues := 新列表
- for i in range(0, n):
- tmpV := A_Values[i] + B_Values[i]
- 將(tmpV, i)新增到combinedValues列表的末尾
- 將combinedValues列表按降序排序
- score_a := 0, score_b := 0
- for i in range(0, n):
- curV := combinedValues[i]
- if i % 2 == 0:
- score_a := score_a + A_Values[curV[1]]
- else:
- score_b := score_b + B_Values[curV[1]]
- if score_a > score_b:
- return 1
- elif score_a == score_b:
- return 0
- else:
- return -1
示例
讓我們看下面的實現,以便更好地理解:
def solve(A_Values, B_Values): n = len(A_Values) combinedValues = [] for i in range(n): tmpV = A_Values[i] + B_Values[i] combinedValues.append([tmpV, i]) combinedValues.sort(reverse=True) score_a, score_b = 0, 0 for i in range(n): curV = combinedValues[i] if (i % 2 == 0): score_a += A_Values[curV[1]] else: score_b += B_Values[curV[1]] if (score_a > score_b): return 1 elif (score_a == score_b): return 0 else: return -1 A_Values = [2,4] B_Values = [3,5] print(solve(A_Values, B_Values))
輸入
[2,4], [3,5]
輸出
1
廣告