码迷,mamicode.com
首页 > 其他好文 > 详细

oj---九度oj---1096----日期类问题一类解法

时间:2017-06-24 15:30:41      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:std   日期类   nbsp   情况   参考   res   mon   void   date   

 

选择参考点,0年1月1日(认为是闰年)。日期a,日期b,算出abs((a-0)-(b-0)).视情况加1,若连续的日期视为两天,则res=abs((a-0)-(b-0))+1 .

#include<cstdio>

int isleap(int n){
    if((n%100!=0&&n%4==0)||n%400==0)
        return 1;
    else return 0;
}
int dayofmonth[13][2]={
0,0,
31,31,
28,29,
31,31,
30,30,
31,31,
30,30,
31,31,
31,31,
30,30,
31,31,
30,30,
31,31,
};  //****//
struct date{
    int d;
    int m;
    int y;
    void nextday(){
        d++;
        if(d>dayofmonth[m][isleap(y)]){
            m++;
            d=1;
        
            if(m>12){
                m=1;
                y++;
            }
        }
    }
};

int process[5005][13][32];
int abs(int x){
    return x<0?-x:x;
}
int main(){
    date tmp;
    int cnt=0;
    tmp.d=1;
    tmp.m=1;
    tmp.y=0;
    while(tmp.y!=5001){
        process[tmp.y][tmp.m][tmp.d]=cnt;
        tmp.nextday();
        cnt++;
    }

    int d1,m1,y1;
    int d2,m2,y2;
    while(scanf("%4d%2d%2d",&y1,&m1,&d1)!=EOF){
        scanf("%4d%2d%2d",&y2,&m2,&d2);
        int res=abs(process[y1][m1][d1]-process[y2][m2][d2])+1;
        printf("%d\n",res);    
    }
    return 0;
}

 

oj---九度oj---1096----日期类问题一类解法

标签:std   日期类   nbsp   情况   参考   res   mon   void   date   

原文地址:http://www.cnblogs.com/kprac/p/7073380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!