概述
规则:有N个棋子,有两个玩家。每个玩家可以从剩下的棋子中取走1-3个。最后取走剩下所有的棋子着为赢家。
例:(引用原文)有21个棋子,有A,B两个玩家。A先开始,请问A要怎么做才能确保自己一定赢?
解答:首先分析问题,要确保自己最后能取走剩下的所有棋子,则必须要确保最后剩下的棋子数为:1~3。所以B最后一次取的时候,一定要为4,(B取1==剩下3,取2==剩下2,取3==剩下1)。
怎么才能剩下4个给B取呢?那只有当A取时,要确保棋子数为:5~7。
有点像分析程序递归问题:先找出口,然后从最后面开始往前面分析。
再上层,要确保B能剩下5~7个棋子,则必须B取时要为8,(B取1==剩下7,B取2==剩下6,B取3==剩下5);
以此类推,总结:要确保B在取时棋子数为4的倍数。
所以开始A要取1个,B则从20个中取。可能取走1,2,3个===》剩下17,18,19个
A再取走1~3个,只要确保剩下为16个就可以。=======》类推,则最后B只能从4个中取了,所以A一定获胜。
扩展:
1.假设是最后取走剩下所有的棋子为输,还是A先取,那A该怎么做才能赢?分析方法雷同,只是最后给B留下的棋子数一定要是1,然后再一层一层的往上推。
2.假设有三个人参加博弈,其他规则一样:最后取走剩下所有的棋子为赢(输),还是A先取,那A该怎么做才能赢?这个有点困难,至少我现在还没解决。后期解决了再贴上来。
注:原文在《
妙趣横生博弈论》
最后
以上就是爱撒娇音响为你收集整理的博弈论策略的全部内容,希望文章能够帮你解决博弈论策略所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复