描述:
有一堆石子共有N个。A,B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A,B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。
例如:
N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。
题解:
显然,如果N=K+1,那么由于一次最多只能取K个,所以,无论A拿走多少个,B都能够一次拿走剩余的物品,B取胜。因此我们发现了如何取胜的法则:如果,(X为任意自然数,Y≤K),那么A要拿走Y个物品,如果B拿走T(T≤K)个,那么A再拿走个,结果剩下个,以后保持这样的取法,那么A肯定获胜。总之,要保持给对手留下的倍数,就能最后获胜。
扩展:
这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。
代码:
include<stdio.h>
int main()
{
long long N,K;
int t;
scanf("%d",&t);
while(t--){
scanf("%lld%lld",&N,&K);
if(N % (K + 1))
printf("A\n");
else
printf("B\n");
}
}