HDU 1201 18岁生日问题
2011-03-25 23:47
393 查看
Description
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
1
1988-03-07
Sample Output
6574
分析:
主要就是判断闰年,生日是在2.29之前还是之后。
关于闰年:
一年有12个月,而1、3、5、7、8、10、12月31天,4,6,9,11月30天,2月平年28天,闰年29天。
判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰.
首先要明白地球的公转时间确切的来说,是365.2422天,即是365日5小时48分46秒
其中的5小时48分先暂且给他加上11分14秒,成为6小时,说明了为什么要4年1润,因为4*6=24,每四年多出来了1个24小时。
从那6小时中减去的11分14秒我们暂且再给它加上3分10秒。成为14分24秒,即是14.4分
14.4分*100年为1440分钟,恰好为24小时。这说明了为什又要每100年不润。
从14分24秒加上的3分10秒也就是190秒,我们给190s加上26秒,成为216秒。216秒*400年便是86400秒便是24小时,说明了400年又要一润。
刚才从216秒钟减去的26秒乘以3200年为83200秒,23小时多一点,近似为一天了,说明每3200年又要少一润。
至于最后这个3200年的少一润为何不精确,相比看到这个年份也应该想明白了。历法自然也是在不断变化的,3200年内可能会发生很多变化。另外的地球的自转与公转也会受到各种影响在这3200年内发生一定的变化,从而导致现有的历法发生变动。因此3200年的这多的一润虽然现在看来不是完全精确的。不过已经绝对可以适用于现在的历法之中了。
Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。
Input
一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
Output
T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
1
1988-03-07
Sample Output
6574
分析:
主要就是判断闰年,生日是在2.29之前还是之后。
#include <iostream> using namespace std; bool IsLeap(int n) { return n%400==0||(n%4==0)&&(n%100!=0); //return !( n % ( n % 100 ? 4 : 400 ) ); } int main(void) { int T; scanf("%d",&T); while(T--) { int yy,mm,dd; int count=0; scanf("%d-%d-%d",&yy,&mm,&dd); if(mm==2&&dd==29) { cout<<-1<<endl; continue; } if(mm>=3) { for(int i=1;i<=18;i++) if(IsLeap(yy+i)) count++; cout<<365*18+count<<endl; } else { for(int i=0;i<18;i++) if(IsLeap(yy+i)) count++; cout<<365*18+count<<endl; } } return 0; }
关于闰年:
一年有12个月,而1、3、5、7、8、10、12月31天,4,6,9,11月30天,2月平年28天,闰年29天。
判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰.
首先要明白地球的公转时间确切的来说,是365.2422天,即是365日5小时48分46秒
其中的5小时48分先暂且给他加上11分14秒,成为6小时,说明了为什么要4年1润,因为4*6=24,每四年多出来了1个24小时。
从那6小时中减去的11分14秒我们暂且再给它加上3分10秒。成为14分24秒,即是14.4分
14.4分*100年为1440分钟,恰好为24小时。这说明了为什又要每100年不润。
从14分24秒加上的3分10秒也就是190秒,我们给190s加上26秒,成为216秒。216秒*400年便是86400秒便是24小时,说明了400年又要一润。
刚才从216秒钟减去的26秒乘以3200年为83200秒,23小时多一点,近似为一天了,说明每3200年又要少一润。
至于最后这个3200年的少一润为何不精确,相比看到这个年份也应该想明白了。历法自然也是在不断变化的,3200年内可能会发生很多变化。另外的地球的自转与公转也会受到各种影响在这3200年内发生一定的变化,从而导致现有的历法发生变动。因此3200年的这多的一润虽然现在看来不是完全精确的。不过已经绝对可以适用于现在的历法之中了。
相关文章推荐
- HDU 1201 18岁的生日
- HDU 1201 18岁生日
- hdu 1201 18岁生日
- HDU:1201- 18岁生日
- hdu-1201-18岁生日
- HDU: 1201-18岁生日
- HDU 1201 18岁生日(水~)
- hdu 1201 18岁生日
- HDU 1201 18岁生日 【日期】
- HDU 1201 18岁的生日
- HDU 1201 18岁生日 模拟题
- (hdu) 1201 18岁生日&&…
- HDU 1201 18岁生日 【日期】
- hdu 1201 18岁生日
- HDU 1201 18岁生日
- hdu 1201 18岁生日 天数模拟
- hdu 1201 18岁生日
- hdu 1201 18岁生日
- HDU 1201 18岁生日
- 18岁生日 HDU - 1201