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