取石子游戏系列(1)

题目来自《编程之美》一排石头的游戏

N块石头排成一列,每块石头都有自己的固定位置,也就是相当于有自己的编号一样。两个玩家依次取石头,每个玩家每次可以取其中任意一块石头,或者相邻的两块,最后将所有石头取走的玩家赢。

这个游戏有必胜策略吗?


取石子有很多变种,限定取石子的规则,就能产生不同的玩法。这类游戏可以称作博弈。博弈有一个基本概念是必胜状态和必败状态。玩家想赢的话,就必须每次都使自己走完之后,对方处在必败状态。(这里假设游戏双方都是足够聪明的)。

对于博弈类题目,我们一般事先很难看出如何处理,这里有个技巧就是:从最简单的情况开始,逐渐增加游戏的难道,这样看看能不能找出一些规律来。


对于这题,我们从讨论一些简单的特例出发。进而逐渐掌握解题的规律:

(1)当N = 1或者N= 2时, 先手赢。

(2)当N=3时,先手可以取走编号为2的石头,这时,1和3是分开来的,后手无法一次取走,先手赢。

(3)当N=4时,先手取走中间编号为2和3的石头,这就转化为N=3时取走编号为2的石头一样的情况了,先手赢。

(4)当N>4时,我们发现一个对称性规律,先手如果想赢的话,就必须将石头堆转化为对称的两部分,如果N为偶数,取走中间两块,如果N为奇数,取走中间一块,这样就转化             为对称的两部分。这时,先手可以采取策略——学后手走。后手在左边一堆取任意位置的石子,先手则在右边的一堆的石子中采用同样的方式取走相同数量的石头。这样先手           也是必胜。


这样看无论如何先手都是赢的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值