📌  相关文章
📜  找出每回合最多从一堆石头中取出 3 个石头的游戏的获胜者(1)

📅  最后修改于: 2023-12-03 15:10:05.324000             🧑  作者: Mango

找出每回合最多从一堆石头中取出 3 个石头的游戏的获胜者

这是一款经典的游戏,游戏规则如下:

  1. 有一堆石头,总数为 n 个。
  2. 每轮两人轮流取石头,每次最少取一个,最多取三个。
  3. 最后无法再取石头的人输。

现在要求你写一个程序,找出该游戏的获胜者。

思路

根据游戏规则,我们可以发现:

  1. 如果初始石头数为 4 的倍数,那么无论怎么取,最后剩下的石头一定是 1 个,此时先手必输。
  2. 如果初始石头数不为 4 的倍数,那么先手可以先取 i 个石头(i = n % 4),然后每次保持剩下的石头数为 4 的倍数,那么无论后手怎么取,先手都可以取到必胜的数目,最后先手必胜。
代码实现
def gameWinner(n: int) -> str:
    if n % 4 == 0:
        return '后手'
    else:
        return '先手'
测试示例
assert gameWinner(1) == '先手'
assert gameWinner(3) == '先手'
assert gameWinner(4) == '后手'
assert gameWinner(5) == '先手'
assert gameWinner(6) == '先手'
assert gameWinner(7) == '先手'
assert gameWinner(8) == '后手'
assert gameWinner(9) == '先手'