在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