巴士博弈:
有一堆n个物品,两个人轮流取物,每次最多取m个,最先取完的人获胜,问怎么才能获胜?
分析:
当n=m+1时,无论第一个人取多少个,第二个人一定获胜。
当n=k(m+1)时也可以得到第二个人一定获胜。
当n=k(m+1)+s,(s<=m),此时,先取者要想获胜,首先拿走s个,后取者拿走r(r <= m)个,先取者再拿走m+1-k个,此时剩下x(m+1)个,先取者一定获胜。
由上面的分析可以知道,获胜的局面是:当剩余的物品个数为m+1的整数倍的时候,接下来取物品的人一定会输。
#include <stdio.h>
int main()
{
int c, n, m;
scanf("%d", &c);
while(c--)
{
scanf("%d %d", &n, &m);
if(n%(m+1) == 0)
printf("Rabbit\n");
else
printf("Grass\n");
}
return 0;
}