在Python中查找石头游戏的赢家的程序

在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得分更高,所以他获胜。

要解决此问题,我们将遵循以下步骤−

  • n:= A_Values的大小
  • combinedValues:=新列表
  • 对于i从0到n,执行以下操作
    • tmpV:= A_Values[i] + B_Values[i]
    • 在combinedValues的末尾插入配对(temV,i)
  • 将列表combinedValues按相反顺序排序
  • score_a:= 0,score_b:= 0
  • 对于i从0到n-1,执行以下操作
    • curV:= combinedValues[i]
    • 如果i mod 2等于0,则
      • score_a:= score_a + A_Values[curV[1]]
    • 否则,
      • score_b:= score_b + B_Values[curV[1]]
  • 如果score_a> score_b,则
    • 返回1
  • 否则,当score_a与score_b相同时,则
    • 返回0
  • 否则,
    • 返回-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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程