zoukankan      html  css  js  c++  java
  • hdu4551

    生日猜猜猜

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
    Total Submission(s): 800    Accepted Submission(s): 299


    Problem Description
    小明对生日十分看重,因为他可以得到祝福,可以和朋友亲人一起分享快乐,可以为自己的人生做一次总结,并且...能够收到好多礼物!
    不过小明是个神秘的人,不会轻易告诉你他的生日,现在他想到一个办法,让你去猜他的生日是哪一天。

    小明会告诉你如下三个信息:

    1. 出生月份和出生日子的最大公约数;
    2. 出生月份和出生日子的最小公倍数;
    3. 出生年份;

    现在要求你猜出小明的生日。
     
    Input
    第一行输入一个正整数T,表示总共有T组册数数据(T <= 200);
    对于每组数据依次输入三个数x,y,z,
    x表示出生月份和出生日子的最大公约数(1<= x <=1000);
    y表示出生月份和出生日子的最小公倍数(1<= y <=1000);
    z表示出生年份(1900 <= z <= 2013)。
    每组输入数据占一行。
     
    Output
    对于每组数据,先输出Case数。
    如果答案不存在 ,输出“-1”;
    如果答案存在但不唯一 ,输出“1”;
    如果答案唯一,输出生日,日期格式为YYYY/MM/DD;
    每组输出占一行,具体输出格式参见样例。
     
    Sample Input
    3
    12 24 1992
    3 70 1999
    9 18 1999
     
    Sample Output
    Case #1: 1992/12/24
    Case #2: -1
    Case #3: 1999/09/18
     
     
    Source
     
     
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    using namespace std;
    int runnian(int y)
    {
        if(y%4==0&&y%100!=0||y%400==0)
            return 1;
        return 0;
    }
    int gcd(int x,int y)
    {
        return y==0?x:gcd(y,x%y);
    }
    int main()
    {
        int n,m,p,num=1,t,s,mon,day,i,j,cnt;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d",&n,&m,&p);
            s=n*m;
            cnt=0;
            for(i=1; i<=12; i++)
            {
                if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                    for(j=1; j<=31; j++)
                    {
                        if(gcd(i,j)==n&&s==i*j)
                        {
                            mon=i;
                            day=j;
                            cnt++;
                        }
                    }
                else if(i==4||i==6||i==9||i==11)
                    for(j=1; j<=30; j++)
                    {
                        if(gcd(i,j)==n&&s==i*j)
                        {
                            mon=i;
                            day=j;
                            cnt++;
                        }
                    }
                else if(i==2&&runnian(p)==1)
                    for(j=1; j<=29; j++)
                    {
                        if(gcd(i,j)==n&&s==i*j)
                        {
                            mon=i;
                            day=j;
                            cnt++;
                        }
                    }
                    else if(i==2&&runnian(p)==0)
                    for(j=1; j<=28; j++)
                    {
                        if(gcd(i,j)==n&&s==i*j)
                        {
                            mon=i;
                            day=j;
                            cnt++;
                        }
                    }
            }
            printf("Case #%d: ",num++);
            if(cnt==1)
                printf("%d/%02d/%02d ",p,mon,day);
            else if(cnt==0)
                printf("-1 ");
            else if(cnt>1)
                printf("1 ");
        }
    }
  • 相关阅读:
    机器学习笔记
    python学习笔记-day8
    python学习笔记-day7
    python学习笔记-day6
    python学习笔记-day5
    python习题
    単語
    bat批处理----copy和xcopy区别
    C#
    VB
  • 原文地址:https://www.cnblogs.com/lxm940130740/p/3330547.html
Copyright © 2011-2022 走看看