Leetcode:292. Nim Game 是否能赢得比赛

来源:互联网 发布:微信加活粉软件 编辑:程序博客网 时间:2024/05/24 05:59

题目: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块石头,最后一块石头总是被你的朋友删除。
分析过程写在代码里面:

     /**     * 其实这个题仔细思考非常的简单     * 由于Nim先拿,所以考虑以下的情况     * 1颗 Win     * 2颗 Win     * 3颗 Win     * 4颗 Failed     * 5颗 先拿1颗 剩余4颗 转换对手 对方Failed Nim:Win     * 6颗 先拿2颗 剩余4颗 转换对手 对方Failed Nim:Win     * 7颗 先拿3颗 剩余4颗 转换对手 对方Failed Nim:Win     * 8颗 不论拿一二三颗的哪一种情况 剩下 7 6 5颗的情况都为下一对手会赢的情况     * Summary: 所以赢的条件是n%4!=0     * @param n     * @return     */    public boolean canWinNim(int n) {        return n%4!=0;    }