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; }