前言

Weekly Contest 132除数博弈

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

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

选出任一 x,满足 0 < x < NN % x == 0
N - x 替换黑板上的数字 N
如果玩家无法执行这些操作,就会输掉游戏。

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

示例1:

输入:2
输出:true
解释:爱丽丝选择 1,鲍勃无法进行操作。

示例2:

输入:3
输出:false
解释:爱丽丝选择 1,鲍勃也选择 1,然后爱丽丝无法进行操作。

提示:

  1. 1 <= N <= 1000

解题思路

本题难度为简单,可是题目的描述会感觉解题十分困难,实际上本题只需要找出爱丽丝鲍勃胜负的周期即可,同类型的题目有292. Nim游戏。下面先列出前5次的胜负情况:

  1. N1时,由于爱丽丝先手,无法进行操作,鲍勃胜利,为false
  2. N2时,爱丽丝胜利,为true
  3. N3时,鲍勃胜利,为false
  4. N4时,取数情况为1,1,1爱丽丝胜利,为true
  5. N5时,取数情况为1,1,1,1鲍勃胜利,为false

从上面列出的胜负情况可以看出,当N奇数时,鲍勃胜利,当N偶数时,爱丽丝胜利。

实现代码

   /**
     * 5024. 除数博弈
     * 1    false
     * 2    1    true
     * 3    1    false
     * 4    1,1,1    true
     * 5    1,1,1,1   false
     * @param N
     * @return
     */
    public boolean divisorGame(int N) {
        return N%2==0;
    }

Null
137 声望31 粉丝

免费的东西是最贵的,好走的只是下坡路