292. Nim Game

1、題目spa

  一、審題code

  

 

  二、分析blog

    你先選,能選 1~3個磚頭,對手在選 1~3個磚頭。若你和對手都很聰明,且能拿到最後一塊磚頭的人勝利,給出磚頭總數 n,求你是否能贏。class

 

2、解答im

  一、思路img

    因爲是咱們先拿,那麼3個之內(包括3個)的石子,咱們直接贏,若是共4個,那麼咱們必定輸,由於無論咱們取幾個,下一我的一次都能取完。若是共5個,咱們贏,由於咱們能夠取一個,而後變成4個讓別人取,根據上面的分析咱們贏,因此最終能留出 4 個給對手選,咱們就能贏。列出1到10個的狀況以下:di

1    Winco

2    Winreturn

3    Winps

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;
    }
相關文章
相關標籤/搜索