I17-leetcode1025除数博弈

题目描述:

爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。

最初,黑板上有一个数字 n 。在每个玩家的回合,玩家需要执行以下操作:

  • 选出任一 x,满足 0 < x < n 且 n % x == 0 。

  • 用 n - x 替换黑板上的数字 n 。

如果玩家无法执行这些操作,就会输掉游戏。

只有在爱丽丝在游戏中取得胜利时才返回 true 。假设两个玩家都以最佳状态参与游戏。

方法一:数学

代码:

def fun(n):
    return n%2==0#偶数必胜

方法二:动态规划

代码:

def fun2(n):
    dp = [False, False, True]  # dp[i]表示剩余i个时候,是胜利还是失败
    for i in range(3, n + 1):
        j=1
        while j<(i // 2 + 2):
            if i % j == 0 and not dp[i - j]:
                dp.append(True)
                break
            j+=1
        if j == (i // 2 + 2):
            dp.append(False)
    return dp[n]

猜你喜欢

转载自blog.csdn.net/m0_58086930/article/details/128677100