2015编程之美资格赛-2月29日

资格赛,水水哒题目,因为参加蓝桥杯才开始做这一类日期的题目。

每次都要判断闰年!!!选择一种最简单的写法吧~

2月29日,好神奇~不过最关键的地方就是判断起始年和结束年是不是闰年,能不能含有2月29日~~~

水水的我哒水水的代码~~

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <sstream>
#include <fstream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
using namespace std;
const int INF = 0x7fffffff;
typedef long long int LL;
const int maxn = 100000 + 100;
const int maxm = 100 + 10;
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define MOD 100007
int judge(int y)
{
    if(y%4==0)
    {
        if(y%100==0)
        {
            if(y%400==0) return 1;
            else return 0;
        }
        else return 1;
    }
    else return 0;
}
int trans(char m[])
{
    if(strcmp(m,"January")==0)       return 1;
    else if(strcmp(m,"February")==0) return 2;
    else if(strcmp(m,"March")==0)    return 3;
    else if(strcmp(m,"April")==0)    return 4;
    else if(strcmp(m,"May")==0)      return 5;
    else if(strcmp(m,"June")==0)     return 6;
    else if(strcmp(m,"July")==0)     return 7;
    else if(strcmp(m,"August")==0)   return 8;
    else if(strcmp(m,"September")==0)return 9;
    else if(strcmp(m,"October")==0)  return 10;
    else if(strcmp(m,"November")==0) return 11;
    else if(strcmp(m,"December")==0) return 12;
}
int before(int m,int d,int y)
{
    int yy=judge(y);
    if(yy=1 && m<=2) return 1;
    else return 0;
}
int after(int m,int d,int y)
{
    int yy=judge(y);
    if(yy==1 && ((m==2 && d==29) || m>2)) return 1;
    else return 0;
}
int main()
{
    int T;
    scanf("%d",&T);
    for(int cases=1; cases<=T; cases++)
    {
        int ans=0;
        char m1[maxm],m2[maxm];
        int d1,d2;
        int y1,y2;
        scanf("%s %d, %d",m1,&d1,&y1);
        scanf("%s %d, %d",m2,&d2,&y2);
        int mo1=trans(m1),mo2=trans(m2);
        if(y1==y2)
        {
            int f1=before(mo1,d1,y1);
            int f2=after(mo2,d2,y1);
            int n1=judge(y1);
            if(n1) if(f1 && f2) ans++;
        }
        else
        {
            int f1=before(mo1,d1,y1);
            int f2=after(mo2,d2,y2);
            int n1=judge(y1);
            int n2=judge(y2);
            if(n1 && f1) ans++;
            if(n2 && f2) ans++;
        }
        if(y2-y1>1)
            for(int y=y1+1; y<y2; y++)
            {
                int yy=judge(y);
                if(yy) ans++;
            }
        printf("Case #%d: %d\n",cases,ans);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值