leetcode_292_nim游戏

你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。

你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。

示例:

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

由于每次能够拿得是1到3之间,那么对手拿k个,你一定可以拿4-k个,所以你只需要保证你第一次拿完之后剩下的是4的整数倍就行了,所以一开始的石头只要不是4的整数倍,也就是说你第一次拿n%3之后的石头后,剩下的就是4的整数倍的石头了,所以根据我们的凑4的策略,接下来对方拿k个你就拿4-k个,最终一定能够赢得,所以题目就变成了判断当前总石头的数量是不是4的倍数,不是的话就是我赢,否则对方赢。

class Solution {
public:
    bool canWinNim(int n) {
        if (n % 4 == 0)
            return false;
        return true;
 
    }
};


猜你喜欢

转载自blog.csdn.net/snow_jie/article/details/80814376