你和你的朋友,两个人一起玩 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;
}
};