Matlab取棋子博弈问题

本文介绍了一个使用Matlab实现的人机棋子博弈游戏。游戏中,随机生成四堆棋子,人先选,电脑后选,取到最后一个棋子者获胜。通过将每堆棋子数转化为二进制并进行特定算法运算,分析得出先手或后手的必胜策略。文章提供了详细算法说明及一个具体实例,并给出了Matlab代码实现的链接。
摘要由CSDN通过智能技术生成

简介

利用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,那么人先选,人如果知道这个算法,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值