你和你的朋友,兩個人一起玩 Nim游戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最后一塊石頭的人就是獲勝者。你作為先手。
你們是聰明人,每一步都是最優解。 編寫一個函數,來判斷你是否可以在給定石頭數量的情況下贏得游戲。
示例:
輸入: 4
輸出: false
解釋: 如果堆中有 4 塊石頭,那么你永遠不會贏得比賽;
因為無論你拿走 1 塊、2 塊 還是 3 塊石頭,最后一塊石頭總是會被你的朋友拿走。
解析 這是巴什博奕 n=k*(m+1)+r n是要報的數,m是最多能報的數,1是最少能報的數,r是決定先手贏和后手贏得關鍵。
例如 A和B報數,每個人報數最小1,最大4,看誰先報到30。
A報1,B就報5-1=4
A報2,Bj就報5-2=3
A報m, B就報5-m
如果是30的話,B如此報法穩贏。
如果是31的話,A就穩贏。
Java版
class Solution {public boolean canWinNim(int n) {if(n%4==0) {//后手贏return false;}//先手贏return true;}
}