火柴遊戲的製勝訣竅
有一種極為有趣的火柴遊戲,源於我國,大約100年前傳到歐洲,取名“寧蒙”,也叫中國二人遊戲。
遊戲的方法是這樣的:有若幹堆火柴,每堆火柴的數目是任意的。現有A、B兩人輪流地取這些火柴,每人隻能從某堆中取去若幹根火柴,也可以整堆全部取走,但不允許跨堆取,即不能一次向兩堆中拿。約定誰拿掉最後一根火柴就算誰贏。
數學家們已經完全掌握了這種兩人遊戲的製勝訣竅。為了讓讀者充分了解取勝的奧妙,我們先從遊戲中的獲勝位置講起。為敘述方便,我們用記號(p,q,r,…,s)表示對策中火柴的狀態。例如(2,2)表示有兩堆火柴,每堆各有兩根;(1,2,3)表示有三堆火柴,各堆分別為一根、二根和三根等等。
很明顯,(1,1)是一種獲勝位置,這是可以直接加以驗證的。(2,2)也是一種獲勝位置。事實上當A拿成(2,2)後,無論B怎樣應付都有A勝。同樣,(1,2,3)也是獲勝位置,當A拿成(1,2,3)後,B可能拿成以下幾種情形。
1°B拿成(2,3),A拿成(2,2)勝;
2°B拿成(1,2,2),A拿成(2,21)勝;
3°B拿成(1,1,3),A拿成(1,1)勝;
4°B拿成(1,3),A拿成(1,1)勝;
5°B拿成(1,2,1),A拿成(1,1)勝;
6°B拿成(1,2),A拿成(1,1)勝。
同樣分析可以知道(n,n)及(1,2n,2n+1)等都是獲勝位置。那麼一般地,怎樣的位置才是獲勝位置呢?探索的過程無疑是很艱辛的!但讀者大可不必重蹈那曲折的認識過程,數學家們已經為我們找到了捷徑。
把每一堆火柴的數目用二進製數表示出來,寫成一行。於是,有幾堆火柴就有幾行二進製數碼。
把各行數對齊,並將各列數碼相加(不進位),把各自結果的奇偶性寫在該列的下方。如果得到的全是偶的,則相應的火柴狀態稱為正確的狀態。數學家告訴我們,正確的狀態是獲勝位置,不正確的狀態就不是獲勝位置。
道理並不難,假定A拿成了一種正確狀態,這時各堆火柴的數目所寫成的二進製數各列之和均為偶數。現在輪到B拿,B不可避免地要動到某行二進位數,從而使這一行的一些1變成0,而另一些0變成1。這就使得一些列的和由偶變為奇,從而由正確狀態變為不正確狀態。
反過來,如果B已經拿成不正確狀態,比如拿成偶、偶、奇、偶、奇、偶,這表明在右起第二列和第四列內,至少各有一個1,此時有以下兩種可能性:
(1)上述兩個“1”在同一個二進位數內,即
××1×1××
則A隻要從這一個二進位數相應的那堆火柴裏,取走1010(2)=10根,這一行的數就變為
××0××0×
上式有“×”的地方,數字不變,這樣A拿後的火柴狀態變為正確狀態。這時相應二進位數各列之和,包括第二列與第四列,都變為偶數。
(2)上述兩個“1”不在同一行,而在兩個不同的行:
也就是說,當從上一行相應的堆取走6根火柴時,上麵兩行將變為如下狀態:
式中有“×”的地方,數字都不變。從而各列之和全為偶數。即此時A已拿成正確狀態。
綜合以上兩種情形,說明如果B拿成不正確狀態,則A一定有辦法把它拿回到正確狀態。而A一旦拿成正確狀態,輪到B拿就隻能破壞這種狀態,這就是說,隻要A在遊戲的某個時刻把握住了正確狀態,他實際上已經穩操勝券了!
我想聰明的讀者大約都已掌握了火柴遊戲的取勝秘訣。不過,如果對方是生手,你完全不必如臨大敵。因為開始時每堆火柴數目很多,堆數也很多,你完全可以隨心所欲地拿。等火柴拿得差不多時,再看準那些形如:
(2,2),(1,2,3),
(n,n),(1,2n,2n+1)
之類基本獲勝位置或它們的組合,你的勝利是完全不成問題的!
火柴遊戲有許多有趣的變式,其中最為精彩和出人意料的那局悶宮棋,雙方的炮均不能離行,逼近將邊的兵也不該動,否則必輸無疑。因此雙方隻有動炮及邊兵,如果把可動的空位當成火柴的根數的話,那麼這種棋局相當於初始狀態為(1,4,8)的火柴遊戲。這不是一個獲勝位置,所以先走的人第一步走“炮七進三”,必定可操勝券。因為這時的狀態(1,4,5)已是一個獲勝位置。