LeetCode——Nim游戏

Q:你和你的朋友在玩下面的尼姆游戏:桌子上有一堆石头,每次你们轮流移走1到3块石头。谁把最后一块石头搬走谁就是胜利者。你将在第一个回合移走石头。你们俩都很聪明,在游戏中都有最佳的策略。写一个函数来确定你是否可以赢得游戏给定的石头堆的数量。例如,如果堆里有4块石头,那么你永远都赢不了游戏:无论你移走1、2或3块石头,最后一块石头都会被你的朋友移走。提示:如果堆里有5块石头,你能想办法把这些石头移走,这样你就永远是赢家了
A:引用:https://www.cnblogs.com/grandyang/p/5226206.html
有史以来最少代码量的解法,虽然解法很简单,但是题目还是蛮有意思的,题目说给我们一堆石子,每次可以拿一个两个或三个,两个人轮流拿,拿到最后一个石子的人获胜,现在给我们一堆石子的个数,问我们能不能赢。那么我们就从最开始分析,由于是我们先拿,那么3个以内(包括3个)的石子,我们直接赢,如果共4个,那么我们一定输,因为不管我们取几个,下一个人一次都能取完。如果共5个,我们赢,因为我们可以取一个,然后变成4个让别人取,根据上面的分析我们赢,所以我们列出1到10个的情况如下:
1.Win
2.Win
3.Win
4.Lost
5.Win
6.Win
7.Win
8.Lost
9.Win
10.Win
由此我们可以发现规律,只要是4的倍数个,我们一定会输,所以对4取余即可

    public boolean canWin(int n){
        return n%4;
    }
posted @ 2020-03-21 22:00  Shaw_喆宇  阅读(222)  评论(0编辑  收藏  举报