/**
* 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.
*
* Hint:
*
* If there are 5 stones in the heap, could you figure out a way to remove the stones such that you will always be the
* winner?
*
* Tags: Brainteaser
*
* Similar Problems: (M) Flip Game II
*/
public class NimGame {
/**
* when n is 4, no matter you remove 1 or 2 or 3 stones, you always lose
* suppose n = 4k, always lose
* when k is k+1, n is 4k+4, which is 4 more stones to remove
* no matter 1 or 2 or 3 stones you remove, your opponent can still make you 4k stones
* for n = 4k+1, 4k+2, 4k+3, you can always remove 1, 2, 3 stones, relatively, to win
*/
public boolean canWinNim(int n) {
return n % 4 != 0;
}
}