zoukankan      html  css  js  c++  java
  • ZSTU-4242-校庆【浙江理工2016全国新生邀请赛E题】

    4242: 校庆
    Time Limit: 1 Sec Memory Limit: 128 MB
    Submit: 1754 Solved: 657
    Description
    2017年10月28日是zstu的120周年校庆,撒花,撒花。为此KI决定设计一个程序,来庆祝我们的校庆:
    给出某一天的日期year-month-date, 求这一天到2017-10-28还差几天。
    Input
    第一行有个整数T, 表示测试组数。T≦100。
    接下来每个测试组,给出三个数year month date。(1900 <=year <=2017 ), 保证每个日期均合法,并且小于2017-10-28。
    Output
    对于每个测试组,请输出对应的答案。

    Sample Input
    1
    2017 10 1
    Sample Output
    27

    分三种情况讨论,当时复制粘贴上半部分的函数,搞得下面一起弄错了,结束了才发现错误,算法没错,被自己坑了·····orz

    #include<stdio.h>//667
    int yeardays(int y)//计算每年多少天的函数
    {
        if((y%4==0&&y%100!=0)||(y%400==0))
            return 366;
        else
            return 365;
    }
    int main()
    {
        int t,y,m,d,i;
        int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};//平年
        int b[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年
        scanf("%d",&t);//t组数据
        while(t--)
        {
            int sum=0;
            scanf("%d%d%d",&y,&m,&d);//年月日
    
            if(y==2017)//第一种情况,当年份为2017年时
            {
                if(m==10)
                {
                    printf("%d
    ",28-d);
                }
                else
                {
                    for(i=m+1; i<10; i++)//当月除外,从下个月加到9月,这是完整的月份
                    {
                        sum=sum+a[i];
                    }
                    sum=sum+a[m]-d+28;//从m月开始,因此m月只剩下a[m]-d天,最后加上十月份天数
                    printf("%d
    ",sum);
                }
            }
    
            else if(y==2016)//第二种情况,当年份为2016年时
            {
                for(i=1; i<m; i++)//因为是2016年,因此2017年完整的确定为301天
                {
                    sum=sum+b[i];//只需要计算此时日期是16年的第几天
                }
                sum=sum+d;
                sum=366-sum+301;//然后计算今年剩余的天数,再加上17年的301天
                printf("%d
    ",sum);
            }
    
            else//第三种情况,当年份为2016年之前时
            {
                if((y%4==0&&y%100!=0)||(y%400==0))//判断平年闰年
                {
                    for(i=1; i<m; i++)
                    {
                        sum=sum+b[i];
                    }
                    sum=sum+d;
                    sum=366-sum;//与之前一样,判断当年剩下的天数
                    for(i=y+1; i<2016; i++)
                    {
                        sum=sum+yeardays(i);//从当年之后的年份往后加
                    }
                    printf("%d
    ",sum+667);
                }
                else
                {
                    for(i=1; i<m; i++)
                    {
                        sum=sum+a[i];
                    }
                    sum=sum+d;
                    sum=365-sum;//与之前一样,判断当年剩下的天数
                    for(i=y+1; i<2016; i++)
                    {
                        sum=sum+yeardays(i);
                    }
                    printf("%d
    ",sum+667);
                }
            }
    
        }
        return 0;
    }
    
  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11794349.html
Copyright © 2011-2022 走看看