leetcode Nim game

刚注册了leetcode,推荐的第一题就是Nim Game。

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.

最开始我的想法是,既然第一次是我拿,目标是最后一次还是我拿,而且剩下的石子是1个,2个或者3个这种情况,后来写了一个,我发现自己没有考虑清楚,对手也是‘clever’的,所以没跑对。去查了一下。代码简单到不行。

class Solution {  
public:  
    bool canWinNim(int n) {  
        return (n%4==0)? false : true;  
    }  
};   

这是博弈论的题目,就是4个石头的情况一定是必败的,所以假如有8个石子,我先拿,无论我拿多少个,对手都会尽可能让我陷入4个石子的情况。以此类推,只要是4的整数倍的石子都是必败的。

原文地址:https://www.cnblogs.com/LUO77/p/4885141.html