nim game (leetcode 292)

原题:

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.

Hint:

  1. If there are 5 stones in the heap, could you figure out a way to remove the stones such that you will always be the winner?

分析:规律性挺强的,看下面分析就知道了

1:win

2:win

3:win

4:lose

5:win,因为自己可以拿1,剩余4,使对方输。1->4

6:win, 因为自己可以拿2,剩余4, 2->4

7:win,因为自己可以拿3,剩余4,3->4

8:lose,自己无论拿几个,决定权都会落在对方手里。

9:win,1->8

10:win,2->8

11:win,3->8

12:lose

……

 

bool canWinNim

bool canWinNim(int n) {
    if(n)
    {
        if(n%4==0)
        return false;
        else 
        return true;
    }
    else 
    return false;
}
posted @ 2015-12-09 16:03  Sparrow6963  阅读(52)  评论(0)    收藏  举报