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

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.