题目描述:
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.
Example:
Input: 4
Output: false
Explanation: 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.
Nim游戏,每次可以从一堆石头中取出1~3颗石头,如果双方都采用最优策略,能否保证一定胜利。其实最优策略就是如果对手取n颗石头,那么自己就取4-n颗石头,这样由于自己先取,只要石头总数不是4的倍数,那么就一定能取到最后一颗石头。但是如果石头总数是4的倍数,同时对手也采取最优策略,那肯定就取不到最后一颗石头。
class Solution {
public:
bool canWinNim(int n) {
return n%4;
}
};