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

更新於:2021年10月6日

瀏覽量:330

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告