计蒜客练习题:取石子游戏
解题思路:设 d=gcd(a,b),那么 a,b 都是 d 的倍数,a+b和a-b也一定是 d 的倍数。然后看 1~n 范围内有多少个数是 d 的倍数,奇数个就是先手赢,偶数个就是后手赢。
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
long long int gcd(long long int a,long long int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int main() {
int t;
cin >> t;
while (t--) {
long long int n,a, b;
cin>>n>>a>>b;
int ans=n/gcd(a,b)%2;
if(ans==1)
cout << "huaye" << "
";
else
cout<<"suantou" << "
";
}
return 0;
}
————————————————————————————————————————
问题描述: