编程之美
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.11 NIM(1)一排石头的游戏

面试是一个让面试双方互相增进了解的过程,不一定总是你问我答,有时候两人可以玩一些游戏,比如:

N块石头排成一行,每块石头有各自固定的位置(如图1-17所示)。两个玩家依次取石头,每个玩家每次可以取其中任意一块石头,或者相邻的两块石头,石头在游戏过程中不能移位(即编号不会改变),最后能将剩下的石头一次取光的玩家获胜。

图1-17 一排石头的位置

这个游戏有必胜策略吗?

分析与解法

初看这个游戏,感觉输赢似乎只是运气问题。但是我们通过深入分析,还是可以发现一些规律的。

注意游戏中“相连”这个条件,若给N块石头从1到N依次编号,则我们只能取编号相连的两块石头,例如可以同时取编号为1和2的两块石头,但不能同时取编号为1和3的两块石头,以此类推。

当题目中有“N个”之类的字眼出现时,我们往往可以从讨论一些简单的特例出发,进而逐渐掌握解题的规律:

(1)石头的数目N=1或者N=2

即只有一块或者两块石头,先取者即可一次取完所有的石头而获胜。

(2)石头的数目N=3

设三块石头排成一行,其编号依次为1、2、3(如图1-18所示),那么先取者若取走中间的2号石头,后取者只能取左边的1号石头或者右边的3号石头,必将剩下一块石头,先取者将取得最后的那块石头而获胜。

图1-18 编号为1、2、3的石头

(3)石头的数目N=4

设4块石头排成一行,其编号依次为1、2、3、4(如图1-19),那么先取者若取走2号石头、3号石头,后取者只能取最左边的1号石头或者最右边的4号石头,必将剩下一块石头,先取者将取得最后的那块石头而获胜。

图1-19 编号为1、2、3、4的石头

如果先取边上的石头(1或4),那么这个局面就退化成三块石头的情况。

(4)石头的数目N > 4

至此,我们发现了一个对称的规律,从前面对两块和3块石头的讨论中不难看出:如果N > 4,先取者取中间的一个(N为奇数)或者中间相连的两个(N为偶数),确保左右两边的石头数目是一样的,之后先取者只要每次以初始中心为对称轴,在与后取者所取石头位置对称的地方取得数目相同的石头,就可以保证每次都有石头取,并且必将取得最后的石头,赢得游戏。

所以说先取者将有必胜的策略!

扩展问题

经过快速思考,你轻松赢得了这个游戏,不由得松了一口气。但是面试者往往会稍微修改规则,和你再玩下去:

1.若规定最后取光石头的人输,又该如何应对呢?这个问题才是面试者真正想考察的。

2.若两个人轮流取一堆石头,每人每次最少取1块石头,最多取K块石头,最后取光石头的人赢得此游戏。

本题其实上是“拈”(NIM)游戏的一种变形,本书中有关“拈”游戏的趣题还有两题,这道题目仅仅是热身而已。