292. Nim Game

一、题目

  1、审题

  

 

  2、分析

    你先选,能选 1~3个砖头,对手在选 1~3个砖头。若你和对手都很聪明,且能拿到最后一块砖头的人胜利,给出砖头总数 n,求你是否能赢。

 

二、解答

  1、思路

    由于是我们先拿,那么3个以内(包括3个)的石子,我们直接赢,如果共4个,那么我们一定输,因为不管我们取几个,下一个人一次都能取完。如果共5个,我们赢,因为我们可以取一个,然后变成4个让别人取,根据上面的分析我们赢,所以最终能留出 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 canWinNim(int n) {
//        return n % 4 != 0 ;
        return (n & 0b11) != 0;
    }

 

posted @ 2018-11-25 15:29  skillking2  阅读(118)  评论(0编辑  收藏  举报