• 暑假热身 E. 无聊的LSY


    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

    #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;
    }
    View Code


    写了好多if判断有点复杂了,附上大神代码写的果然简练。

    #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;
    }
    View Code
  • 相关阅读:
    Java 7的javax.net.ssl.SSLHandshakeException
    Oracle数据泵导出数据库
    ORA-00054: 资源正忙 --锁表的解决方法
    Linux学习私人笔记-Shell基础
    Linux学习私人笔记-目录和文件的基本命令
    Linux学习私人笔记-文件基本命令
    Linux学习私人笔记-账号管理
    Linux学习私人笔记-Vim
    form提交表单时本地下载
    SQL Servel 中分页解决
  • 原文地址:https://www.cnblogs.com/dzzy/p/4733994.html
Copyright © 2020-2023  润新知