[292].Nim 遊戲

 


題目

你和你的朋友,兩個人一起玩 Nim 遊戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最後一塊石頭的人就是獲勝者。你作爲先手。

你們是聰明人,每一步都是最優解。 編寫一個函數,來判斷你是否可以在給定石頭數量的情況下贏得遊戲。

示例:

輸入: 4
輸出: false 
解釋: 如果堆中有 4 塊石頭,那麼你永遠不會贏得比賽;
     因爲無論你拿走 1 塊、2 塊 還是 3 塊石頭,最後一塊石頭總是會被你的朋友拿走。

 


函數原型

C的函數原型:

bool canWinNim(int n){}

 


邊界判斷

bool canWinNim(int n){
	if( n <= 0 )
		return false;
}

 


算法設計:餘數

具體分析,請猛擊:《蹭同桌飯的遊戲》。

bool canWinNim(int n){
	if( n <= 0 )
		return false;
	
	if( n % 4 == 0 )
		return false;
	else
		return true;
}

% 4 因爲 422的冪,可以改成 & 3

bool canWinNim(int n){
	return (n & 3) != 0;
}
  • 時間複雜度:Θ(1)\Theta(1)
  • 空間複雜度:Θ(1)\Theta(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章