5024-除数博弈

前言

Weekly Contest 132除数博弈code

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

最初,黑板上有一个数字 N 。在每一个玩家的回合,玩家须要执行如下操做:leetcode

选出任一 x,知足 0 < x < NN % x == 0
N - x 替换黑板上的数字 N
若是玩家没法执行这些操做,就会输掉游戏。get

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

示例1:im

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

示例2:di

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

提示:vi

  1. 1 <= N <= 1000

解题思路

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

  1. N1时,因为爱丽丝先手,没法进行操做,鲍勃胜利,为false
  2. N2时,爱丽丝胜利,为true
  3. N3时,鲍勃胜利,为false
  4. N4时,取数状况为1,1,1爱丽丝胜利,为true
  5. N5时,取数状况为1,1,1,1鲍勃胜利,为false

从上面列出的胜负状况能够看出,当N奇数时,鲍勃胜利,当N偶数时,爱丽丝胜利。block

实现代码

/**
     * 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;
    }
相关文章
相关标签/搜索