Leetcode 292. Nim 游戏

地址 https://leetcode-cn.com/problems/nim-game/

你和你的朋友,两个人一起玩 Nim 游戏:
桌子上有一堆石头。
你们轮流进行自己的回合,你作为先手。
每一回合,轮到的人拿掉 1 - 3 块石头。
拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。
如果可以赢,返回 true;否则,返回 false 。


示例 1:
输入:n = 4
输出:false 
解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;
     因为无论你拿走 1 块、2 块 还是 3 块石头,最后一块石头总是会被你的朋友拿走。

示例 2:
输入:n = 1
输出:true


示例 3:
输入:n = 2
输出:true

解答
这个是博弈题目的入门题目。
根据题目描述可得,若堆中只剩4个石头,则当前选手必输。

同样的向上推一个回合,若堆中有 4+1 ~~~ 4+3个石头,则对手可以取走1到3个石头,使得下一回合堆中只剩4个石头,则下一轮选手必输
1回合 堆中5~7个石头 A取走1~3个石头
2回合 堆中4个石头 B必输

向上推一个回合,若堆中有 4+4个石头,则当前回合无论上一回合选择如何取石头,当前回合肯定剩下4+x是否,那么当前回合选择就取走x块是否,则必胜
1回合 堆中8个石头 A取走1~3个石头
2回合 堆中5到7个石头 B必胜

以此类推,胜负的关键就是当前的石头数是否是4的倍数

class Solution {
public:
    bool canWinNim(int n) {
        return n%4;
    }
};
原文地址:https://www.cnblogs.com/itdef/p/15524294.html