求解Grundy算法(在线等待)
例1:如果桌上有10个数,规定甲乙两人轮流取子。每次只准取1、2或5个子。
首先令g(0)=0,那么
1.如果还剩下1颗子,可以取1个,则变为只有0个子,而g(0)=0,
所以g(1)=1;
2.如果还剩下2颗子,a.可以取1个,则变为只有1个子,而g(1)=1,
b.可以取2个,则变为只有0个子,而g(0)=0,
所以g(2)=2;
3.如果还剩下3颗子,a.可以取1个,则变为只有2个子,而g(2)=2,
b.可以取2个,则变为只有1个子,而g(1)=1,
所以g(3)=0;
4.如果还剩下4颗子,a.可以取1个,则变为只有3个子,而g(3)=0,
b.可以取2个,则变为只有2个子,而g(2)=2,
所以g(4)=1;
5.如果还剩下5颗子,a.可以取1个,则变为只有4个子,而g(4)=1,
b.可以取2个,则变为只有3个子,而g(3)=0,
c.可以取5个,则变为只有0个子,而g(0)=0,
所以g(5)=2;
6.如果还剩下6颗子,a.可以取1个,则变为只有5个子,而g(5)=2,
b.可以取2个,则变为只有4个子,而g(4)=1,
c.可以取5个,则变为只有1个子,而g(1)=1,
所以g(6)=0;
......
以此类推得出:
X = 0 1 2 3 4 5 6 7 8 9 10
g(X)= 0 1 2 0 1 2 0 1 2 0 1
如果还剩10个棋子,那么先取的一定获胜。
我要写出一这样的函数int g(int param)
来得到对应的数值。
有哪位高人能写出来。
100分送上。