**:
1. 原題
1.1 題目
n塊石頭排成一行,每塊石頭有各自固定的位置。兩個玩家依次取石頭,每個玩家每次可以取其中任意一塊石頭,或者相鄰的兩塊石頭,
石頭在遊戲過程中不能移位(即編號不會改變),最後能將剩下的石頭一次取光的玩家獲勝。這個遊戲有必勝策略嗎?
1.2 解答
已知:石頭數量為n,假設兩個玩家分別為玩家a和玩家b,且玩家a先取石頭。
當n<=2時,玩家a可以直接取完所有的石頭,玩家a有必勝策略。
當n=3時,玩家a先取中間的1個石頭,剩下的兩個石頭,玩家b只能取其中的1個,最後1個由玩家a取得,玩家a有必勝策略。
當n=4時,玩家a先取中間的2個石頭,這會又剩下2個石頭,玩家b還是只能取其中1個,最後乙個由玩家a取得,玩家a有必勝策略。
當n>4,且n為奇數時,玩家a取中間的1個石頭,剩下的左邊石頭情況和右邊石頭情況一樣,那麼無論玩家b如何取石頭,玩家a只要
在相反的方向取相同數量的石頭即可,如此下去,最後必然玩家a取得最後的石頭,a有必勝策略。
根據上面的歸納,先手的玩家只有把中間的石頭拿走,如果n是奇數,就拿走中間的1個石頭,如果n是偶數,就拿走中間的2個石頭,
這樣留給玩家b乙個對稱的局面,接著,無論玩家b怎麼拿石頭,玩家a都保證對稱局面不變,這樣,最後肯定是a取得最後的石頭。
2. 擴充套件1(下邊的做法,不清楚對不對,感覺有些問題)
2.1 題目
若規定最後取光石頭的人輸,又該如何應對?
2.2 解答
n=1時,a必須取得這唯一的也是最後的乙個石頭,a必然輸掉,這是必然結果,無需策略。
n=2時,a取乙個石頭,那麼b必然取得剩下的乙個石頭,a有必勝策略。
n=3時,a取兩個石頭,那麼b必然取得剩下的乙個石頭,a有必勝策略。
n=4時,若a取兩個石頭,那麼b取乙個石頭,a只能取最後剩下的乙個石頭。
若a取乙個石頭,那麼b取兩個石頭,a只能取最後剩下的乙個石頭。
因此,無論a怎麼取,b都有必勝策略。
n=5時,a只需取邊上的乙個石頭,這樣就轉化為n=4,b先取了,這樣根據上面的分析,可知n=4時,後取的有必勝策略,
因此,a有必勝
策略。
n=6時,a只需取邊上的兩個石頭,這樣就轉化為n=4,b先取了,這樣根據上面的分析,可知n=4時,後取的有必勝策略,
因此,a有必勝
策略。
分析到這裡,貌似是:n%3=1時,b有必勝策略,n%3=2和n%3=0時,a有必勝策略。但是證明方法一直沒有想清楚,
一排石頭的遊戲」的文章進行了證明,不過證明的核心地方一筆帶過,相當於沒有證明。
感覺這個擴充套件中比較麻煩的地方在於「一排石
子」,而且n很大的情況下,如果一步一步a和b分別取石子後,最後得到的石子之間
可能不是連續的,這樣結果就不確定了。比如:最後
還有3個連續的石子,a先取,a有必勝策略;最後還有3個都不連續的石子,a先取,a肯定失敗。所以呢,最後剩餘的石頭狀態很重要,現在我只是分析到這裡,也沒看到網上誰很好的解決了這個問題。
3. 擴充套件2
3.1 題目
若兩個人輪流取一堆石頭,每人每次最少取1塊石頭,最多取k塊石頭,最後取光石頭的人贏得此遊戲。
3.2 解答
1)極端情況:k>=n
玩家a可以直接取掉所有石頭,獲得勝利。
2) 一般情況:k
這裡面有個規律,就是,無論乙個玩家拿了多少個石頭,另乙個玩家都能夠選擇相應的石頭數量,使得兩個玩家一起拿k+1個石頭。
從上面這個思路,我們考慮n與k+1之間的數值關係:
n = (k+1) * c + d,其中c>=1,d>=0
當d!=0時,玩家
a先取d個石頭,這樣還剩(k+1)*c+1個石頭。然後輪到玩家b取石頭,不管玩家b取了多少個石頭,玩家a都再取相應
的石頭,使得玩家a和玩家b一起取(k+1)個石頭,這樣,還剩(k+1)*(c-1)+1個石頭,如此往復,最後,肯定a取完石頭。
舉例說明:
剩餘石頭數目 取石頭
(k+1) * c + d a取d個
(k+1) * c b取x個,a取(k+1-x)個
(k+1) * (c-1) ...
k+1 b取x個a取(k+1-x)個0
當d=0時,無論a取多少個石頭,b取相應的石頭,使得a和b一起取(k+1)個石頭,這樣最後取到石頭的肯定是玩家b。
舉例說明:
剩餘石頭數目 取石頭
(k+1) * c a取x個,b取(k+1-x)個
(k+1) * (c-1) ...
... ...
k+1 a取x個,b取(k+1-x)個 0
即n%(k+1)=0時,玩家b有必勝策略,n%(k+1)!=0時,玩家a有必勝策略。
可以看出來,如果k很大的話,而n的數值是隨機的話,先手的優勢是很明顯的。
程式設計之美 NIM(1)一排石頭的遊戲
題目大意 n塊石頭排成一行,兩個玩家依次取石頭,每個玩家可以取其中任意一塊或者相鄰的兩塊,最後能將剩下的石頭一次取光的玩家獲勝。分析 1 n 1 n 2,必勝 2 n 3,先取者取中間1塊石頭,左右還剩下各1塊石頭,無論第二個人怎麼取,己方必勝 3 n 4,先取者取中間2塊石頭,還是左右各剩一塊,己...
程式設計之美1 11NIM 1 一排石頭遊戲
解決問題的思路 當題目中有 n 出現時,可以從假設n 1開始,逐步掌握規律 擴充套件問題1 若規定最後取光石頭的人輸,先取者是否有必勝策略 當n 1時,必輸 當n 2時,必勝 當n 3時,1,2,3 先取1,2或者先取2,3,有必勝策略 當n 4時,1,2,3,4 無論怎樣取,對手不放水,先取者輸,...
程式設計之美 一排石頭的遊戲(拓展問題)
程式設計之美 一書中1.11章節介紹了nim遊戲的取勝問題。n塊石頭排成一行,每塊石頭有各自固定的位置。兩個玩家依次取石頭,每個玩家每次可以取其中任意一塊石頭,或相鄰的兩塊石頭,石頭在遊戲過程中不能移位 即編號不會改變 最後能將剩下的石頭一次取光的玩家獲勝。在這樣的規則下,先取的玩家可以在第一步取走...