计算玩家1在2人游戏中可以获胜的方式数量

时间:2017-11-09 16:31:43

标签: algorithm

我遇到了以下问题,

2名玩家玩游戏。在每个回合中,两个玩家都接收-x到+ x(包括两者)范围内的分数。玩家1从得分p1开始,玩家2从得分p2开始。如果他们总共进行了5次转弯,找到玩家1赢得比赛的总方式,即在k转弯结束时,玩家1的得分高于玩家2。

所以简而言之,我的理解是我们需要找到player1和player2的积分组合总数,使得(玩家1的积分总和) - (玩家2的积分总和)> = p2 -p1 + 1

我不确定如何解决这个问题。请建议一种方法。提前谢谢。

1 个答案:

答案 0 :(得分: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)

你能从那里拿走吗?