程式設計之美 nim 3 的遞迴解法

2021-08-15 13:47:42 字數 601 閱讀 6985

​// 程式設計之美1.13 nim(3) 兩對石頭的遊戲

// 一種遞迴解法

package main

import (

"fmt"

)// 兩堆石頭, 假定 n <= m

type pair struct

var mapsafe map[pair]bool

func main()

}}func nim(n, m int) bool

if n > m

result, ok := mapsafe[pair]

if ok

// 若 (i,m) 或 (i, m-n+i)中有不安全局面, 則(n, m)是安全的

for i := 1; i < n; i++ ] = true

return true}}

// 若 (n, i)中有不安全局面, 則(n, m)是安全的

for i := 1; i < m; i++ ] = true

return true}}

mapsafe[pair] = false

return false

}

程式設計之美 1 12 nim 2

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

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

程式設計之美上面有個nim的遊戲,規則如下 有n堆石頭,兩個人輪流從中取,一次只能在一堆中取,至少取乙個,最多把這一堆取完,取得最後乙個石頭的人勝利,問誰有必勝策略。解 設這n堆石頭的個數分別是x1,x2 xn,設f x x1 x2 x3 xn。如果f x 0則後取的獲勝,否則,先取的獲勝。證明 如...

程式設計之美1 13 NIM 3 兩堆石頭的遊戲

問題 假設有兩堆石頭,有兩個玩家會根據如下的規則輪流取石頭 每人每次可以從兩堆石頭中各取出數量相等的石頭,或者僅從一堆石頭中取出 任意數量的石頭 最後把剩下的石頭一次拿光的人獲勝。請問在哪些局面 依 據兩堆石頭中的石頭個數 下,先取石頭的玩家有必勝的策略。解法 類似構造質數的篩選方法,這裡我們利用找...