题意:n座塔,除编号为a,b的塔保留下来以外,其他塔需要重建,对于已建成的塔j,k(包括a,b两塔),每次只能重建编号为j+k或j-k的塔,Yuwgna和Iaka两个僧人轮流建一座塔,Yuwgna先手,最后不能建的人输,问最终获胜的人是哪个
解:我们其实可以尝试一下j+k与j-k都可以得到哪些数,最终我们发现能建的塔的编号必定是gcd(a,b)的倍数(其实,由不断的j-k我们可以联想到更相减损法(gcd的一种求解方法,另一种是辗转相除法)),这样的话,我们只要判断n以内gcd(a,b)的倍数的奇偶性,就可以知道是谁获胜了。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int gcd(int a,int b)
{
while(b)
{
int c=a%b;
a=b;
b=c;
}
return a;
}
int main()
{
int t,k=1;
scanf("%d",&t);
while(t--)
{
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
int x=gcd(a,b);
n/=x;
n-=2;
if(n%2==0)
{
printf("Case #%d: Iaka\n",k++);
}
else
{
printf("Case #%d: Yuwgna\n",k++);
}
}
return 0;
}