编程之美 NIM游戏与NIM扩展游戏的讨论及解

编程之美上面有个NIM的游戏,规则如下:

有n堆石头,两个人轮流从中取,一次只能在一堆中取,至少取一个,最多把这一堆取完,取得最后一个石头的人胜利,问谁有必胜策略。

解:

设这n堆石头的个数分别是X1,X2……Xn,设F(X)= X1 ^X2 ^ X3……^Xn。如果F(X)= 0则后取的获胜,否则,先取的获胜。

证明:

如果这剩下的石头的个数的的异或值为0,则无论从一堆中取多少个,取完之后剩下的异或值一定不是0,反之,如果异或值不为0,那么一定可以从一堆中取一些,从而使取完之后的异或值为0.

但是,有一个似乎更难的题目,就是有n堆石头,两个人轮流从中取,一次只能在一堆中取,至少取一个,最多把这一堆取完,取得最后一个石头的人输,问谁有必胜策略。

这个题目的结果与上面完全相同。

证明如下:

显然,如果某一个人取之前面临的状态是k,1,1,1,1…1,也就是除了一堆不是1,其它的都是1,则这个人一定会胜利,因为这个人可以保证取完之后每一堆剩下的数目都是1,并且还有奇数个,然后这个人一定胜利。

在游戏开始的时候,如果F(x)=0,则说明第一个人取完之后,F(x)!=0,所以,说明第一个人取完之后游戏的状态不可能全部是1,这样,在第二个人思考的时候,如果此时他面临的状态是k,1,1,…1,则它一定胜利,否则他就从一堆中取,从而使取完之后F(x)=0,这样一直下去,也就是说,最后出现的k,1,1,1…1 一定是第二个人首先看到,这样他一定胜利。

反之,如果F(x)!= 0,则如果第一个人面临的状态是k,1,1,1…1,则他一定胜利,否则,他可以保证自己取之后使F(x)=0,显然,F(x)=0的时候一定不可能是k,1,1,1…1的状态,也就是说,状态k,1,1,1..1这种状态永远不是第二个人会碰到的,于是,总会到一定时候,第一个人在自己取的时候面临着k,1,1,1..1的状态。当然,如果第一个人取的时候不是k,1,1,1..1的状态,他就应该使自己取完之后F(x)=0。

证明完毕


版权所有,各位如果转载请标明出处。谢谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值