来自《编程之美》
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,那么先手有必胜策略。