火柴游戏的制胜诀窍
有一种极为有趣的火柴游戏,源于我国,大约 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××
则 A 只要从这一个二进位数相应的那堆火柴里,取走 1010(2)=10 根, 这一行的数就变为
××0××0×
上式有“×”的地方,数字不变,这样 A 拿后的火柴状态变为正确状态。这时相应二进位数各列之和,包括第二列与第四列,都变为偶数。
- 上述两个“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)已是一个获胜位置。