Nim Game這個游戲是:
有一堆石頭疊在一起。然后兩個人互相remove石頭from top. 一個人一次可以拿1--3塊石頭。
whoever remove the last pieces win. 游戲由我方開始。
這個題的level是一個Easy,但是我很可恥的沒有做出來?!净揪褪窍肓?0秒就放棄了。。?!?/p>
正確的思考邏輯是: 什么情況我們會輸? 假設最簡單的case, 4個石頭。 我先拿1--3塊石頭。 發現拿不完,但是剩下的1--3塊石頭剛好對手可以一次性拿走。 這種情況我們贏不了。
那如果5塊石頭呢?我一次拿1塊, 對手就會只剩4塊石頭。 這時候我們根據4塊石頭的case得出結論,我一定能贏。 如果6塊石頭呢? 我一次拿2塊石頭,又讓情況回到了4塊石頭的水平。
所以這個pattern 看下來,如果我有辦法讓對手那輪只剩4個石頭,我就贏定了,否則我就輸定了。到這里都還屬于比較簡單的, 但是怎么代碼怎么實現這個判斷呢?
我覺得從這里還是看不出來。。。
需要舉更多的例子來看出。 【最重要的部分】假設8塊石頭,我一次可以拿1--3塊石頭。但是對手可以通過調整數量使下一次輪到我的時候 只剩4個石頭,所以8個石頭的case 我是一定輸的。得出一個結論,誰輪到8個石頭誰輸。 那12個石頭呢? 假設我先,我能拿1-3個,對手可以逼迫我回到8個石頭的情況,我還是輸。所以只要是4的倍數,我就贏不了。
return(n%4!=0);