找规律的题目,对于1, 2, 3块石头,由于我们可以一次拿走,所以必赢。
而如果是4块石头,不管我们拿多少块(1、2、3),最会剩下1~3块,使得对手可以一次拿走,所以必输。
我们管n=1,2,3叫必胜态,n=4叫必败态。
注意到,一个必败态的n加上1,2,3,又变成了必胜态。比如n=5,6,7的时候,我们可以(分别)拿1,2,3块石头,
使得剩下的石头数量是4,留给对手一个必败态,这样我们就必胜了。
所以一个必败态加1,加2,加3就是必胜态。
而如果一个必败态+4,则不管我们拿多少块,都留给了对手一个必胜态。则我们必败了。
所以规律就是,当n是4的倍数的时候,必败。
其他情况下,必胜。、
代码如下:
class Solution {
public:
bool canWinNim(int n) {
if(n % 4 == 0) {
return false;
}
return true;
}
};