版权声明:作为一个蒟蒻,转载时请通知我这个蒟蒻 https://blog.csdn.net/zyszlb2003/article/details/89853613
古代的
Nim取石子游戏是由两个人面对若干堆石子进行的游戏。
设有
n≥2堆石子,各堆分别含有
A1、A2⋯An个石子。
游戏的目的就是选取最后剩下的石子。游戏规则如下:
- 游戏人交替进行游戏
- 当轮到每个游戏人取子时,选择这些石子中的一堆,并从所选的堆中取走至少一个石子
(游戏人也可以取走他所选择的堆中的全部石子,于是留下一个空堆)
当所有的堆都变成空堆时,游戏结束。
最后取子(即能够取走最后一堆中剩下的所有石子)的游戏人,视为游戏的胜利者。
这种游戏称为
NIM游戏。
对于这种游戏,只有先手必胜和先手必败两种情况。
定理:
NIM先手必胜,当且仅当
A1xorA2xorA3xor⋯xorAn不等于
0
证明:
- 所有物品都被取光是一个必败局面(对手取走最后一件物品,对手已经获得胜利),此时显然有
A1xorA2xorA3xor⋯xorAn=0。
- 对于任意一个局面,如果
A1xorA2xorA3xor⋯xorAn=x不等于
0,如果x二进制表示下最高位的1在第k位,那么至少存在一个石子
Ai,它的第
k位为1。显然
Aixorx<Ai时,我们就能从
Ai堆中取走若干柿子,使其变成
Aixorx,从而得到了一个各堆石子数异或起来等于
0的局面。
- 对面任意一个局面,如果
A1xorA2xorA3xor⋯xorAn=0,那么无论如何取柿子,得到的局面下各堆石子异或起来都不等于
0。用反证法可以证明,假设
Ai被取成了
Aixorx,由于
x=0,所以不满足从所选的堆中取走至少一个石子。
- 综上所述,
NIM先手必胜,当且仅当
A1xorA2xorA3xor⋯xorAn不等于
0,证毕。