NIM 博弈游戏

本文探讨了一种有趣的桌面游戏——三行硬币游戏。游戏中,两名玩家轮流从三行不同数量的硬币中取走任意数量的硬币,目标是拿到最后一枚硬币。文章分析了在何种情况下先手玩家会输,并提到了游戏的必胜策略涉及到了所有元素的异或值。

桌面上有三行硬币,每一行中分别有a1、a2、a3个硬币,其中a1、a2、a3是可以任意指定的正整数。两个人轮流拿走硬币,每一次只能从某一行中拿走任意多个硬币,谁拿走最后一枚硬币谁就赢了。

比如说a1=1,a2=2,a3=3的情况吧,这时如果轮到我拿了,我可以从第三行拿走2枚硬币,或者可以把第三行的三枚硬币全都拿走,等等;但是我不能同时从第一行和第三行里各拿走1枚硬币。这个简单的情况,可以枚举所有可能性得出结论:先拿的必输。

当a1、a2、a3是任意给定的,在什么情况下先拿的必输呢?必胜策略是怎样的呢?这是一个相当有意思的问题,答案可绝不是显而易见一目了然的。而当我当年看到这个策略长什么模样之后,完全的叹服了。今天我就先不写必胜策略了,大家可以先自己想想,如果下周或者什么时候有时间了再来写。前一阵子我为了熟悉C++自己写了一个拈游戏的人机对弈程序,大家可以点击下面的链接下载。其中包含了必胜策略,所以只要你一步走错就一定会输。

其实拈游戏不仅仅局限于三行硬币,其实最初的问题是N行的,而且神奇的是其必胜策略对于任何N都是一样的。

SG函数:所有元素的异或值,判断异或值是0非0,有特效。。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值