LeetCode1025.除数博弈(C++)

题目描述
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。
最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:

选出任一 x,满足 0 < x < N 且 N % x == 0 。
用 N - x 替换黑板上的数字 N 。

如果玩家无法执行这些操作,就会输掉游戏。
只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 False。假设两个玩家都以最佳状态参与游戏。

题解思路:
注意本题中题目描述的最后一句话:假设两个玩家都以最佳状态参与游戏(可以假设每次两个人都选择x==1这一选项),当两个人所有的选择状态都结束的时候如果选择次数为奇数的时候则爱丽丝获胜否则鲍勃获胜。

class Solution {
public:
    bool divisorGame(int n) {
        int count=0,x=1;
        if(n==1)
        {
            return false;
        }
        while(n>1)
        {
            if(n%x==0)
            {
                n=n-x;
                count++;
            }
            else
            {
                break;
            }
        }
        return count%2==0?0:1;
    }
};

LeetCode1025.除数博弈(C++)_第1张图片

你可能感兴趣的:(leetcode,c++,算法)