我遇到了下面这个问题,
两个玩家玩一个游戏在每个回合中,两个玩家都获得-x到+x范围内的分数(都包括在内)玩家1从得分p1开始,玩家2从得分p2开始。如果他们总共玩了k回合,找出玩家1赢得游戏的方式总数,即在k回合结束时,玩家1比玩家2有更多的点数。
简而言之,我的理解是我们需要找到player1和player2的组合点数集合的总数,这样(player1的点数集合之和)-(player2的点数集合之和)>=p2-p1+1
我不知道如何解决这个问题。请提出一种方法。提前谢谢。
最佳答案
递归地解决这个问题使用您的变量,让我们看看案例:让
score_range = [-x : x]
调用函数
win_count
基本情况,k==1
如果
k == 1
,还有一圈要走。分数差是p2-p1如果玩家2在这一回合中得分n2
分,那么玩家1需要在这一回合中以至少(p2 + n2) - p1 + 1
分结束。现在,有多少种组合可用于p1, p2 in score_range
?你可以直接从给定的整数来计算。返回该计数作为函数值。
递归情况,k>1
浏览这一轮所有可能的分数。重复计算游戏剩余部分的可能性。
count = 0
for n1 in score_range
for n2 in score_range
count += win_count(p1+n1, p2+n2, k-1, x)
你能从那里拿走吗?
关于algorithm - 计算玩家1在2玩家游戏中获胜的方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47207009/