对于这个博弈,有一种经典的例题:
1.只有一堆数量为n的石子;
2.只有两个人参与这个游戏;
3.两个人轮流取1--m个石子;
4.最先取完石子的人赢;
输出:
如果先手赢,输出1,否则输出0;
题解:
如果n=m+1,因为最多取m个。所以先手不论取多少个,后手都能一次拿完。
所以,要想先手赢 n=(m+1)*r+s,(r为自然数,s为1--m).
那么先手拿走s个,后手拿走1--m个,,,那么先手肯定获胜。总之要给对手留下 m+1个的倍数,,先手就能获胜。
于是只要判断 n%(m+1)是否等于0。
如果等于0,那么无论先手怎么取,都会输。
1 int n,m; 2 if(n%(m+1)) 3 printf("0 "); 4 else 5 printf("1 ");