You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.
Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.
For example, if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.
思路:这题就是一个找规律的题目,发现这个游戏的规律,这游戏对先选的人优势太大了,当你是第一个的时候只要石头的数目不是4的倍数,这样你选几个石头使剩下的石头数目是4的倍数,就赢了。就不更深入的讲为什么剩下的是4的倍数的时候先手的人肯定输。这都不明白的也就不适合学算法了。
代码如下(已通过leetcode)
public class Solution {
public boolean canWinNim(int n) {
if(n%4==0) return false;
else return true;
}
}