Matlab取棋子博弈问题

简介

利用Matlab实现了一个人机棋子博弈游戏

玩法

随机生成4堆棋子(棋子数为10以内的整数),人先选,电脑后选,选到最后一个棋子胜,每次只能从一堆中选棋子,个数不限

算法

将每堆棋子的个数转为二进制a1,a2,a3,a4,进行二进制不进位相加得到a,规定a=0这个状态为偶状态,那么最后四堆全空也是偶状态。所以只要保证每轮选择完成后为偶状态,无论下一轮另一个怎么选择,都会破坏偶状态,再按照上面的方法恢复偶状态,循坏直到最后四堆全空的偶状态即胜利。如果最开始相加得出的a不为0,那么a1,a2,a3,a4中必有至少一个ai在a的最高位为1(若a为0100,则a1,a2,a3,a4中必有至少一个ai的第二位为1,注意从第0位开始),为了保证a=0,那么就在ai这堆中选择棋子,才能使a的最高位变为0。假设选择bi个,剩下(ai-bi)个,为了使a=0,必须保证剩下的(ai-bi)与另外三堆棋子的二进制和为0,即

  • (a1-b1)+a2+a3+a4=0(假设i=1)
  • 又 ∵ a1+a2+a3+a4=a
  • ∴ a1-b1=a1-a
  • ∵a1-b1为十进制运算,a1-a为二进制运算,二进制不进位相减即为相加
  • ∴a1-b1=a+a1
  • 即ai-bi(十进制减法)=a+ai(二进制不进位加法)

由此可得,每轮电脑要在ai这堆中剩下的棋子数为(a+ai)(二进制)个,那么电脑每轮要取走的棋子数bi,即

  • bi=ai-(a+ai)
  • 将二进制的a+ai转为十进制后,这是剩下的棋子个数,用总个数ai进行十进制减法即可得到取走的棋子数bi

若最初的a=0,则后选有必胜策略,若a!=0,则先选有必胜的策略,在这个程序中随机生成的一般a!=0,那么人先选,人如果知道这个算法,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值