假设编号为1,2,3,4,5.取相邻的两块石头是指可以取12,但是如果先把2号石头拿走了,是不可以取13的,认定此时两块石头是不相邻的。
我们可以先用列举的方式来找规律,假设A先取:
N = 1,A必赢;
N = 2,A必赢;
N = 3,A取中间的必赢;
N = 4,A取中间的两个必赢;
N = 5,A取中间的一个必赢;
N = 6,A先取中间的两个必赢;
…
A取中间的石头使得左右两边留下相同的数目就必赢(如果N为偶数,取中间的两个;如果N为奇数,取中间的一个)。
思考:如果最后能将剩下的石头一次取光的玩家判定为输,那是否有必胜策略呢?
同样先来列举思路,假设A先取:
N = 1,<1>,A必输;
N = 2,<1,1>,A只拿一个必赢;
N = 3,<1,1,1>,A只拿相邻两个,剩下<1>,必赢;
N = 4,<1,1,1,1>,A拿走最边上的一块变成<1,1,1>;拿走最边上的两块变成<1,1>;拿走中间的一块变成<1,1,0,1>;拿走中间的两块变成<1,0,0,1>;都必输;
N = 5,<1,1,1,1,1>,A拿走最边上的一块变成<1,1,1,1>必赢;
…
对于N块石头,N足够大.便有以下结论:
如果N块石头你必输的话,那么N+1,N+2你必赢.因为你可以取走边角的1块或2块,然后就剩下了N块石头,并且是对手取,对手必然会输.
所以推出(k为任意整数):
N = 3K + 1.B赢
N = 3K + 2,A赢
N = 3K + 3,A赢
同样用列举的方式,用N表示石头的堆数,M表示总的石头数目。
当N = 1 时,A必输;
N = 2,如果(1,1)A必赢;如果(1,X),B可以拿走小于X - 1 的石头,A必输;如果(2,2)(3,3)…都是A必赢;
…
当摆放方法为(1,1,…,1)的时候,如果1的个数是奇数个,则先拿者赢;如果1的个数是偶数个,则先拿者必输;
当摆放方法为(1,1,…,1,X),先拿者必赢;
此外还有其他的摆放方法,比如N = 9,(2,3,4)
可以考虑异或原理:
XOR(0,0) = 0
XOR(1,0) = 1
XOR(1,1) = 1
推理整个游戏过程,从N堆石头(M1,M2,M3)开始,石头一直递减到全部为(0,0,…,0)
当M为奇数时,无论怎么分堆,都是B赢;其他的我们只要保证每次将XOR(M1,M2,…,M3) = 0,就能保证赢的局面。
可以利用质数筛子的方法来列举,用数对(m,n)表示一堆石头有m块,另一堆有n块。删除所有A必赢的局面:
剩下的如下图:
可以得出结论,一般而言,第n组的不安全局面(an,bn)可以由以下定义得到: