Leetcode之Nim Game

来源:互联网 发布:ftp连接阿里云服务器 编辑:程序博客网 时间:2024/06/08 05:26

题 目:

      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-3块小石头,当玩家前面有4个石子的时候,它肯定会输,进一步,如果玩家前面有4的整数倍石子里,它也一定会输,因为对方也不是个省油的灯---它可以每次都跟你凑满4个小石头。由此观之,只要在你面前的石头数不是4的整数倍,且在第一局你移出石头后,让对方面对的石头数为4的整数倍,你都可以获得完全的胜利。


代码如下:

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

class Solution(object):    def canWinNim(self, n):        """        :type n: int        :rtype: bool        """        return (n % 4) != 0

题目很简单,先获得小小的信心。博客都快长草了,再不辛勤劳作和耕耘就要错过收获的季节了,加油!

0 0
原创粉丝点击