LSY大牛没事就爱玩游戏,包括很多很无聊的游戏。某日,LSY大牛又找到了一个无聊的游戏:每一局游戏的开始,LSY大牛将代表自己的棋子放在一个线性棋盘的最左端(第0个格子,可以认为向右端无限延伸),接着,他会从浩大的牌堆里随机摸三张牌A,B和N,在本局中,LSY大牛可以将代表自己的棋子向左或者向右移动A或者B个格子,当LSY的棋子停在了第N个格子上的时候,LSY大牛将获得本局比赛的胜利。当然,这游戏实在是有点太无聊了……于是LSY大牛希望大家写一个小程序来帮助他判断当前比赛是否能够获胜。
Input
测试数据有多组。每一行为一组测试数据,分别为A,B,N三个数的值(0<A,B,N<100000)。
当输入0 0 0的时候退出,此行数据不处理。
Output
对于每一组测试数据,若LSY大牛可以赢的本局比赛的胜利,则输出YES,否则输出NO。
Sample Input
3 5 7 2 4 5 0 0 0
Sample Output
YES NO
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int main() { int A,B,T,S,N,M=0,Q=0,v=1,i; while(1) { scanf("%d %d %d",&A,&B,&N); if(A==0&&N==0&&B==0){break;} if(A==B&&N==0||A==B&&N%A==0){printf("YES ");goto as;} if(A%2==0&&B%2==0&&N%2!=0){printf("NO ");goto as;} if(A==1||B==1){printf("YES ");goto as;} if(A>B){T=B;} if(A<B){T=A;} for(i=T-1;i>=2;i++) { if(A%i==0&&B%i==0) { v=0;break; //不互质 } } if(v==1){printf("YES ");goto as;} if(v==0) { while(1){ if(A>B){S=A;T=B;} if(A<B){S=B;T=A;} M=S-T; A=M; B=T; if(M==1||M==N){printf("YES ");goto as;} if(M==T&&N==0){printf("YES ");goto as;} if(M==T&&N!=0){S=0;break;} } if(S==0&&N%M==0){printf("YES ");goto as;} } printf("NO "); as: A=B=T=S=N=M=Q=0;v=1; } return 0; }
写了好多if判断有点复杂了,附上大神代码写的果然简练。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> int main() { int a, b, n; int i, j; // while(1) { scanf("%d%d%d", &a, &b, &n); if( a == 0 && b == 0 && n == 0 ) break; else { for( i = 1; i <= a; i++ ) { if( a % i == 0 && b % i ==0 ) j = i; } if( n % j == 0 ) printf("YES "); else printf("NO "); } } return 0; }