来自《编程之美》

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

这个题目和放硬币问题(​​点击打开链接​​)差不多

答案是先手有必胜策略。


拓展:

如果规定,最后取完所有硬币的人输,谁又有必胜策略呢?

先看看前面几个状态:

1是负态,2是胜态,3是胜态,4是负态


其实,先手第一次操作无非只有2类:

第一类,把n变成a和b,a+b=n-1或n-2

即留下左边的a个和右边的b个,取走1个或者2个

第二类,把n变成n-1或者n-2,即取走最左边的1个或者2个


对于第一类操作:

(1)如果a是负态

后手可以保证b那一块是后手最后拿完。

也就是说,后手可以保证,a那一块一定是先手先开始拿。

注意,我并没有说先拿完b,然后先手就只能拿a了,而是说,a和b是独立的,

既然后手可以保证b那一块是后手最后拿完,那么就可以保证,a那一块一定是先手先开始拿。

这样的话,后手就胜利了。

(2)如果b是负态,和(1)是一样的

(3)如果a和b都是胜态

显然后手就胜利了。

a和b是独立的,后手可以保证a是先手最后拿完,b也是先手最后拿完。

也就说,无论n是多少,如果先手采用第一类操作,就一定输了。


如果n-1或者n-2是负态,那么对应的取走最左边的1个或者2个,这就是必胜策略了,n就是胜态。

如果n-1和n-2都是胜态,那么n就是负态。

根据这个进行递推可以发现,

如果n=3k+1,那么后手有必胜策略,如果n=3k或者3k+2,那么先手有必胜策略。


答案是,如果n=3k+1,那么后手有必胜策略,如果n=3k或者3k+2,那么先手有必胜策略。