思路:
先说结论:作为先手,如果堆中石头的数量 n 不能被 4 整除,那么你总是可以赢得 Nim 游戏的胜利。
原因:1.小于3块的话,你作为先手就可以全拿走,结束游戏。
2.如果刚好4块的话,作为先手一定会输,因为对手一定会拿走最后一块。所以在自己的回合中应避免自己剩下4个。
3.但是如果不是4倍数的话,就可以控制将4个留给对手,那么自己必定会赢。比如7,那就先把后四个排除,剩下3个,自己都拿走,就将四个僵局留给对手。比如13,将3*4剪掉,第一次自己拿走1个,后几轮对手不管哪几个,你都可以和他配对成4个,然后把最后4个留给他。
4.如果刚好是4的倍数,比如8,对方很容易将4的僵局留给你,将后面四个先排除,前四个你作为先手不管拿1-3几个,对面都可以和你加起来等于4,从而把后四个留给你。
所以把n除以4,如果整除,那就必定会输。相反,总会赢。
class Solution {
public boolean canWinNim(int n) {
return n%4!=0;
}
}
巴什博弈:
有n个石子,每人可以随便拿1−m个石子,不能拿的人为败者,问谁会胜利?
有一个定律:就是n%(m+1)!=0 的话,先手一定会赢。