2014年第五届蓝桥杯决赛C组题目 第三题 标题:日期差

来源:互联网 发布:王旭中医淘宝店铺好吗 编辑:程序博客网 时间:2024/05/23 21:59

第三题 标题:日期差

 

标题:日期差

 

    历史上,不同的人类聚居地可能有不同的历法,因而记录下来的资料中日期的换算就很麻烦。幸好今天我们统一使用公元纪年法。当然,这种历法对求两个日期差多少天也不是十分简便,但毕竟是可以忍受的。

 

    下面的程序计算了两个日期的差值,两个日期都使用公元纪年法。

 

    请分析程序逻辑,并推断划线部分缺失的代码。

 

intto_day(int y, int m, int d)

{

         int mon[] ={0,31,28,31,30,31,30,31,31,30,31,30,31};

         int day = 0;

         int i;

         for(i=1; i<y; i++){

                   day += (i%4==0 &&i%100!=0 || i%400==0)? 366 : 365;

         }

        

         if(y%4==0 && y%100!=0 ||y%400==0) mon[2]++;

        

         for(i=1; i<m; i++){

                   _____________________;  //填空位置

         }

        

         return day + d;

}

 

intdiff(int y1, int m1, int d1, int y2, int m2, int d2)

{

         int a = to_day(y1, m1, d1);

         int b = to_day(y2, m2, d2);

         return b-a;

}

 

intmain()

{

         int n = diff(1864,12,31,1865,1,1);

         printf("%d\n", n);

         return 0;

}

 

注意:通过浏览器提交答案。只填写缺少的内容,不要填写任何多余的内容(例如:说明性文字或已有符号)。

 

解题思路:

         第一次看到这种题目,感觉还是有把握的!有把握的题目就有拿分!

 

代码:

#include<stdio.h>

 

intto_day(int y, int m, int d)

{

         int mon[] ={0,31,28,31,30,31,30,31,31,30,31,30,31};

         int day = 0;

         int i;

         for(i=1; i<y; i++){

                   day += (i%4==0 &&i%100!=0 || i%400==0)? 366 : 365;

         }

        

         if(y%4==0 && y%100!=0 ||y%400==0) mon[2]++;

        

         for(i=1; i<m; i++){

                   day+=mon[i];  //填空位置

         }

        

         return day + d;

}

 

intdiff(int y1, int m1, int d1, int y2, int m2, int d2)

{

         int a = to_day(y1, m1, d1);

         int b = to_day(y2, m2, d2);

         return b-a;

}

 

intmain()

{

         int n = diff(1864,12,31,1865,1,1);

         printf("%d\n", n);

         return 0;

}

 

 

 

 

0 0
原创粉丝点击