LeetCode-Brainteaser-292. Nim Game

问题:https://leetcode.com/problems/nim-game/?tab=Description
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.
你正在和你的朋友们玩下面这个Nim游戏:桌子上有一堆石头,每次你从中去掉1-3个。谁消除掉最后一个石头即为赢家。你在取出石头的第一轮。
你们中的每一个人都有着聪明的头脑和绝佳的策略。写一个函数来确定对于给定的数字是否你可以赢得这场比赛。
例如,如果堆中有4个石头,那么你永远也无法赢得比赛:无论你移除了1、2或3个石头,最后一个石头都会被你的朋友所移除。
分析:博弈论取石子的经典问题,每次最多取1-m个石子。在初始状态一定的情况下,博弈的结果不是必胜就是必败,所以必败的状态就是剩余4个石子的情况,同样4的倍数都是必败的。关键要推导出必胜或必败的公式。
参考C++代码:

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

你可能感兴趣的:(LeetCode-其他,游戏,each,heap,leetcode)