一排石头的游戏

《编程之美》1.11节介绍了一个取石头的游戏,游戏规则如下:N个石头排成一行,两个玩家依次取石头,每次可以取一块或者相邻的两块,取到最后一块石头的获胜。如果A方先手,如何保证自己获胜?

书中给出了一个A必胜的方案,如果总共有奇数个石头,A取走中间的一块,如果总共有偶数块石头,A取走中间的两块,这样石头将变成对称的两堆,A只要按照和对手对称的方法选取,最终总是可以取到最后一块石头,从而保证获胜。

书中还给了一个扩展问题:如果取到最后石头的人判输,A应该如何应对?

很容易可以推导出A在1块石头的情况下必输,2、3块时必胜,4时必输,在此基础上可以推导出5、6时必胜(因为A首先取走边上的1块或2块石头就变成了4块,此时B先手必输);于是网上许多文章认为石头总数为3k+1时A必输,其它时候必胜。

其实这个过程是错误的,大部分认为7块石头A必输的推导过程,都是说A取走一块或两块之后变成了5块或6块石头,而这是一个对方先手必胜的局面,这里的推导过程显然忽视了连续性这个问题,A如果不是从边缘而是从中间的某个位置取走一块石头,则剩余石头就变成了非连续的6块石头,前面的结论就未必成立了,因此这里的推导在逻辑上是有漏洞的。

实际上,对于7块石头,存在着A先手必胜的方案,那就是取走中间的一块,这样总的石头就变成了分离的两部分,每边3块,这时B有几种可能的策略:

1)  在任意一堆,取走边上的一块,这时A取走另外一堆边上的一块,变成2*2的两堆;如果B取走其中1块,A取走另外一方的两块,则A胜,如果B取走一方的两块,A取走另外一方的1块,也是A胜;

2)  在任意一堆取走中间的一块,这时A取走另外一堆相邻的两块,剩余三个不连续的石子该B取,A胜;

3)  在任意一堆取走连续的两块,这时A取走另外一堆中间的一块,同样变成剩余三个不连续的石子该B取,还是A胜;

同样的,对于8块石头的情况,A先手取走中间的两块,后面的过程和7块石头相同,也是A必胜。

至于9个以及更多石头的方案,留待后续研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值