首页 > 其他 > 详细

编程之美2015资格赛A题

时间:2015-04-25 17:56:59      阅读:180      评论:0      收藏:0      [点我收藏+]

题目1 : 2月29日

时间限制:2000ms
单点时限:1000ms
内存限制:256MB

描述

给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期)。

只有闰年有2月29日,满足以下一个条件的年份为闰年:

1. 年份能被4整除但不能被100整除

2. 年份能被400整除

输入

第一行为一个整数T,表示数据组数。

之 后每组数据包含两行。每一行格式为"month day, year",表示一个日期。month为{"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"}中的一个字符串。day与year为两个数字。

数据保证给定的日期合法且第一个日期早于或等于第二个日期。

输出

对于每组数据输出一行,形如"Case #X: Y"。X为数据组数,从1开始,Y为答案。

数据范围

1 ≤ T ≤ 550

小数据:

2000 ≤ year ≤ 3000

大数据:

2000 ≤ year ≤ 2×109

样例输入
4
January 12, 2012
March 19, 2012
August 12, 2899
August 12, 2901
August 12, 2000
August 12, 2005
February 29, 2004
February 29, 2012
样例输出
Case #1: 1
Case #2: 0
Case #3: 1
Case #4: 3
小数据AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
#include<cstring>
char month[13][12]= {"0","January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November" , "December"};
int check(int year)
{
    int a;
    if(((year%4==0)&&(year%100!=0))||(year%400==0))
        a=1;
    else
        a=0;
    return a;
}
int main()
{
    int t;
    cin>>t;
    int n=1;
    do
    {
        int m1,d1,y1,m2,d2,y2;
        int ans=0;
        char mon1[20],mon2[20];
        scanf("%s%d,%d",&mon1,&d1,&y1);
        scanf("%s%d,%d",&mon2,&d2,&y2);

        for(int i=1; i<13; i++)
        {
            if(strcmp(mon1,month[i])==0)
            {
                m1=i;
                break;
            }
        }
        for(int i=1; i<13; i++)
        {
            if(strcmp(mon2,month[i])==0)
            {
                m2=i;
                break;
            }
        }
        //  cout<<m1<<"-"<<d1<<"-"<<y1<<endl;

        //  cout<<m2<<"-"<<d2<<"-"<<y2<<endl;



        for(int k=y1; k<=y2; k++)
        {
            ans=ans+check(k);
        }
        if(y1==y2)
        {
            if(check(y1))
            {


                if(m1>=3||m2<2||(m2==2&&d2<29))
                    ans--;
            }
        }
        else
        {
            if(check(y1))
            {
                if(m1>=3)
                    ans--;
            }

            if(check(y2))
            {
                if((m2<2)||(m2==2&&d2<29))
                    ans--;
            }
        }
        cout<<"Case #"<<n<<": "<<ans<<endl;
        n++;

    }
    while(n<=t);
}


编程之美2015资格赛A题

原文:http://www.cnblogs.com/qq252756561/p/4456152.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!