一个游戏:A和B一起报数,每个人每次最少报一个,最多报4个。轮流报数,看谁先报到30。
比如A先报数的话,那么B一定可以赢(这里假定B知道怎么正确的报数)
B可以这样报数,每次报5-k(A)个数,其中k(A)是A报数的个数
两人报完数之后会变成5 10 15 20 25 30这样B一定会赢。比如说我们报到5(4+1),每次报最多报4个,最少报1个.那么后者一定可以赢。
那么如果我们要报到n+1,每次最多报n个,最少报1个的话,后者一定能够赢。
现在我们需要报数到n,而每次最多报数m个,最少报数1个.我们可以化成这样
n = k*(1+m)+r(0 <= r <= m)这样的话如果r不等于0那么先手一定会赢,理由:首先先手报r个,那么剩下k倍(1+m)个数,可以看成由后手先报数,报到n-r为止,那么先手就一定会赢;如果r=0那么后手一定会赢,道理一样的。
using namespace std;
int main()
{
int num, limit;//num为最后报到的数,limit为最多报的数个数
scanf("%d %d", &num, &limit);
if (num%(limit+1)!=0)
printf("先手win");
else
printf("后手win");
return 0;
}