斐波那契尼姆遊戲介紹
有一種兩人遊戲,名叫“尼姆”。遊戲方法是由兩個人輪流取一堆粒數不限的砂子。先取的一方可以取任意粒,但不能把這堆砂子全部取走。後取的一方,取數也多少不拘,但最多不能超過對方所取砂子數的一倍。然後又輪到先取的一方來取,但也不能超過對方最後一次所取砂子的一倍。這樣交替地進行下去,直到全部砂子被取光為止,誰能拿到最後一粒砂子,誰就算勝利者。在這個遊戲中,若所有砂子的粒數是個斐波那契數的話,那么後取的一方穩操勝券,但所有的砂子不是一個斐波那契數的話,那么先取的一方穩勝。
經典遊戲之大師拿火柴
美國計算機大師唐納特·E·克努特先生在其名著《電腦程式設計技巧》一書提到“斐波那契·尼姆”。
由兩個人輪流取一堆粒數不限的火柴。先取的一方可以取任意根,但不能把這火柴全部取走。後取的一方,取數也多少不拘,但最多不能超過對方所取火柴數的一倍。然後又輪到先取的一方來取,但也不能超過對方最後一次所取火柴的一倍。這樣交替地進行下去,直到全部火柴被取光為止,誰能拿到最後一根火柴,誰就算勝利者。在這個遊戲中,若所有火柴的根數是個斐波那契數的話,那么後取的一方穩操勝券,但所有的火柴不是一個斐波那契數的話,那么先取的一方穩勝。
克努特先生在其書中問到:假使開局時有1000根火柴。那有沒有什麼竅門可以使先走的人穩操勝券?
具體分析
如果遊戲雙方不是對等的話,那么懂得訣竅的一方不論先走還是後走,都可以制服對方。如果都懂得訣竅,那么就取決於雙方開局時的狀態。
所謂的“斐波那契數”是:
1,1,2,3,5,8,13,21,34,55...
這個數列的組成規則是,從第三項起,第一項等於它前面兩項之和。
舉個例子:假定開局時堆中有8根火柴(8是個斐波那契數),按照遊戲規則,先走者不能把8根一次取盡,他最多可以取7根,6根,5根...,顯然這些取法將讓他立即失敗。譬如說,他如果拿5根的話,那么後者可以把剩下的3根全部拿走。由於最後一根包括在內,所以後者馬上就贏了。
於是先走者考慮了一個比較好的辦法,第一次先取2根,這時後者不能一下子就取勝。那么,他的最優對策又將如何?
後走者的正確對策是取掉1根,使得留下來的火柴數是5根。請注意5是一個比8小一號的斐波那契數,也就是說下了一層樓。通過這種“層層下樓”的辦法後者可以穩操勝券。
由於1000不是一個斐波那契數,但是按照數列的構成規則,不難算出55後面的數字:
55,89,144,233,377,610,987...
按照上面的分析,先走者只要拿掉13根火柴,使得剩下的火柴根數為987根(987是一個斐波那契數),然後步步為營的小心對待,他就可以穩贏無疑。
許多遊戲的取勝之道是鬥智,而非鬥力,這就是一個好例子。
參考文獻
實用智力訓練測試寶典之智力測試 2004年版 甘肅文化出版社