Nim 游戏 -(拿石头游戏)

本文详细解析了Nim游戏的基本规则及其背后隐藏的数学策略。文章指出,若玩家能够确保对手面对4的倍数数量的石子,则可以始终占据优势并最终获胜。此外,提供了三种不同的编程实现方式来判断当前局面是否有利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nim游戏的规则是:

1. 有N个石头(肯定大于0否则就没法玩了)

2. 有两个玩家(因为就你们两个好基友)

3. 自己先下手(够腹黑的,嘿嘿)

4. 每次必须拿1-3个石头(不能太贪婪)

5. 最后拿完的算赢(全部都归最后拿完的那个人,如果石头是钻石的话……,这结果会不会导致基友感情破裂?)

 

通过规则发现了一些诀窍:

1. 如果轮到自己的时候余数为1-3,也就是自己能拿完的时候就赢了;

2. 如果留给对方的是4个,无论对方怎么拿最终留给自己的总是能一次拿完;相反,你要是得到4个,那你就输了;

3. 作为腹黑的你肯定要想方设法让对方留给你1-3个,或者尽可能的留给对方4个;

4. 只要留给自己的不是4的整数倍,自己就能赢(拿完者赢),因为只要自己不是4的整数倍,自己就能让对方一直变成4的整数倍

 

所以方案就是:

自己要尽可能的让对方拿石子之前变成4的整数倍,而自己决不能出现这种情况;

本着双方都是有着爱因斯坦般聪明无比的原则,显然轮到自己时剩余量为4的整数倍自己就输了;

 

代码

1 return ((n % 4) != 0);      // 如果除以4求余结果不是0说明不是4的整数倍
2 return ((n & 0b11)!=0);      // 0b11是二进制3的意思,这里是位与,相当于保留最后两个比特,如果结果不是0说明不是4的整数倍
3 return ((n >> 2 << 2) != n);   // n右移两位再左移两位如果不能和原来的数相同,说明右移丢失的2个比特不是0,这也证明了不是4的整数倍

 

转载于:https://www.cnblogs.com/duacai/p/9235743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值