一维的容易很多,不过仍然不存在一个漂亮的公式。
取数会把原来连续的一段数字分成两段,相当于两个子游戏。所以仍然可以用处理nim类问题的一般方法。求得前100项为:
0,1,1,2,0,3,1,1,0,3,3,2,2,4,0,5,2,2,3,3,0,1,1,3,0,2,1,1,0,4,5,2,7,4,0,1,1,2,0,3,
1,1,0,3,3,2,2,4,4,5,5,2,3,3,0,1,1,3,0,2,1,1,0,4,5,3,7,4,8,1,1,2,0,3,1,1,0,3,3,2,
2,4,4,5,5,9,3,3,0,1,1,3,0,2,1,1,0,4,5,3,
程序如下:
import java.util.BitSet;
public class X
{
public static void main(String[] args)
{
int[] nim = new int[100];
nim[0] = 0;
nim[1] = 1;
nim[2] = 1;
for (int i = 3; i < nim.length; i++)
{
calculate(i, nim);
}
for (int i = 0; i < nim.length; i++)
{
System.out.print(nim + ",");
}
}
private static void calculate(int i, int[] nim)
{
BitSet handleSet = new BitSet();
handleSet.set(nim[i-2]);
handleSet.set(nim[i-3]);
int n = i-3;
for (int index = 0; index <= n/2; index++)
{
handleSet.set(nim[index] ^ nim[n-index]);
}
nim = handleSet.nextClearBit(0);
}
} |