我来解《取硬币游戏》

     今天在google的MAILIST TopLanguage社区看到了张志强的BLOG—— 张志强|阅微堂,并在其中看到了 《取硬币游戏》
     游戏规则描述的全文如下:

n枚硬币排成一排,两人轮流取,每人每次可取其中一枚或者相邻的两枚。

  1. 取到最后一枚硬币的赢得游戏。分析游戏策略。
  2. 取到最后一枚硬币的算输。分析游戏策略。

第二种情况的特殊情形(n=8)是今天软件实验班的招生考试试题。



    从题目的描述看,最后肯定会出现将这一排硬币被分割成m个小段的情况。在此,将各段硬币的数量用逗号分开标记,各段的顺序不会影响结果,关键看各段硬币数量的组合数。

    为了让自己一定能赢,必须使得对手在最后的一(对于第一种情况)两(对于第二种情况)次取币中没有选择(指只有一种取法)或者无法挽回(指有多中取法,但造成的结果一样)。


    对于第一种情况——取到最后一枚硬币的赢:

    那么我必须给对手造成这样的状态——1,1(最后剩下两枚,分开的)。因为只有这样,才能保证最后一枚硬币总会是自己的。这是一样从结果状态往前推的方法。为了让〈1,1〉这种状态是对手遇到而不让自己有机会遇到,这就与初始状态下的硬币数量以及过程中的取法有关系了。能造成这样状态的前一状态是〈3〉,〈1,2〉,〈1,3〉,〈1,1,1〉,〈1,1,2〉。这里说明一下〈3〉,指的是最后剩下三个,并且是连在一起的,取中间一个就造成了〈1,1〉的状态。这里每一种状态在往前推都会出现多中情况,但只有给对手造成了〈1,1〉的状态,那才是有绝对取胜的把握。


    对于第二种情况——取到最后一枚硬币的输:

    为了让自己一定能赢就要给对手造成〈1,1,1〉这种状态。道理和上面相似。


    如果不考虑“相邻的”这一条件,那么就是魔群月光的留言中说的道理了。



    魔群月光的留言的留言如下:

先说第二种情况吧,如果硬币数是3k+1,那么只要对手不出错误,先取的人肯定失败;否则,他先取一枚或者两枚,使得剩下的硬币数为3k+1,下面他只要盯着对手,保证每次他取完后剩下的硬币都可以表示成3k+1的形式,那么最后一枚硬币肯定是对手的。

第一种情况类似,只要初始硬币数不是3k的形式,那么他就可以取胜,原因不再赘述。

说实话,这是我小学时候看的题~


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值