程式設計之美 NIM遊戲與NIM擴充套件遊戲的討論及解

2021-08-27 12:20:27 字數 924 閱讀 3385

程式設計之美上面有個nim的遊戲,規則如下:

有n堆石頭,兩個人輪流從中取,一次只能在一堆中取,至少取乙個,最多把這一堆取完,取得最後乙個石頭的人勝利,問誰有必勝策略。

解:設這n堆石頭的個數分別是x1,x2……xn,設f(x)= x1 ^x2 ^ x3……^xn。如果f(x)= 0則後取的獲勝,否則,先取的獲勝。

證明:如果這剩下的石頭的個數的的異或值為0,則無論從一堆中取多少個,取完之後剩下的異或值一定不是0,反之,如果異或值不為0,那麼一定可以從一堆中取一些,從而使取完之後的異或值為0.

但是,有乙個似乎更難的題目,就是有n堆石頭,兩個人輪流從中取,一次只能在一堆中取,至少取乙個,最多把這一堆取完,取得最後乙個石頭的人輸,問誰有必勝策略。

這個題目的結果與上面完全相同。

證明如下:

顯然,如果某乙個人取之前面臨的狀態是k,1,1,1,1…1,也就是除了一堆不是1,其它的都是1,則這個人一定會勝利,因為這個人可以保證取完之後每一堆剩下的數目都是1,並且還有奇數個,然後這個人一定勝利。

在遊戲開始的時候,如果f(x)=0,則說明第乙個人取完之後,f(x)!=0,所以,說明第乙個人取完之後遊戲的狀態不可能全部是1,這樣,在第二個人思考的時候,如果此時他面臨的狀態是k,1,1,…1,則它一定勝利,否則他就從一堆中取,從而使取完之後f(x)=0,這樣一直下去,也就是說,最後出現的k,1,1,1…1 一定是第二個人首先看到,這樣他一定勝利。

反之,如果f(x)!= 0,則如果第乙個人面臨的狀態是k,1,1,1…1,則他一定勝利,否則,他可以保證自己取之後使f(x)=0,顯然,f(x)=0的時候一定不可能是k,1,1,1…1的狀態,也就是說,狀態k,1,1,1..1這種狀態永遠不是第二個人會碰到的,於是,總會到一定時候,第乙個人在自己取的時候面臨著k,1,1,1..1的狀態。當然,如果第乙個人取的時候不是k,1,1,1..1的狀態,他就應該使自己取完之後f(x)=0。

證明完畢

程式設計之美NIM(2)遊戲分析擴充套件問題

問題 有n塊石頭和兩個玩家a和b,玩家a先將石頭隨機分成若干堆,然後按照baba.的順序不斷輪流取石頭,能將剩下的石頭一次取光的玩家獲勝,每次取石頭時,每個玩家只能從若干堆石頭中任選一堆,取這一堆石頭中任意數目 大於0 個石頭。請問 玩家a要怎樣分配和取石頭才能保證自己有把握取勝?如果石頭的個數n為...

程式設計之美 1 12 nim 2

參考 有若干堆石頭,a,b分布依次取,一次只能選擇一堆,從這堆中選擇大於0的石頭,問 1,如果最後取光石頭的人獲勝,a在什麼情況下獲勝?2,如果最後取光石頭的人失敗,a在什麼情況下獲勝?1.在規則1下,先手獲勝的情況,在規則2下先手同樣獲勝 2.規則1和規則2的取法不一樣。設當石頭出現 1,1,1,...

Nim遊戲與階梯Nim博弈

問題描述 一共有n堆石子,編號1 n,第i堆中有個a i 個石子。每一次操作alice和bob可以從任意一堆石子中取出任意數量的石子,至少取一顆,至多取出這一堆剩下的所有石子。兩個人輪流行動,取光所有石子的一方獲勝。aice為先手.給定a,假設兩人都採用最優策略,誰會獲勝?問題分析 從簡單情況分析,...