题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512
题目大意:有n座宝塔,其中编号为a,b的两座是完好的,其他都有损坏,有两个人想要修复这些宝塔,但是每次能修复的编号必须是i=j+k或者i=j-k,其中j,k必须是完好的宝塔标号,无塔可修的人失败,计算这两个人谁能胜出。
解题思路:求两个数的最大公约数,然后只要是公约数的倍数都可以被修,记得最后减去2,因为题目给出的a,b也一定能被遍历到。
AC代码:
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
return a==0?b:gcd(b%a,a);
}
int main()
{
int t;
int n,a,b;
int sum,cnt;
while(cin>>t)
{
for(int j=1;j<=t;j++)
{
cin>>n>>a>>b;
cout<<"Case #"<<j<<": ";
if(a>b)
{
int temp = a;
a = b;
b = temp;
}
sum = gcd(a,b);
cnt=0;
for(int i=sum;i<=n;i+=sum)
cnt++;
cnt-=2;
if(cnt%2!=0)cout<<"Yuwgna"<<endl;
else cout<<"Iaka"<<endl;
}
}
return 0;
}