首页 > 技术文章 > 2013第四届蓝桥杯A高斯日记 (日期问题)

taiga 2020-04-12 23:03 原文

【题目】

大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢? 

高斯出生于:1777年4月30日。    

在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113   

请你算出高斯获得博士学位的年月日。

提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21

【思路】(答案1799-07-16)

①代码法:循环8112次(高斯出生那天算一天了)。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 bool isleapyear(int y){
 5     return (y%4==0&&y%100!=0)||(y%400==0);
 6 }
 7 
 8 int main(){
 9     int y=1777,m=4,d=30;
10     for(int i=0;i<8112;i++){
11         d++;
12         if(m==12&&d==32){
13             y++;
14             m=1;
15             d=1;
16             continue;
17         }
18         if((m==1||m==3||m==5||m==7||m==8||m==10)&&d==32){ 
19             m++;
20             d=1;
21             continue;
22         }
23         if((m==4||m==6||m==9||m==11)&&d==31){
24             m++;
25             d=1;
26             continue;
27         }
28         if(m==2&&isleapyear(y)&&d==30){
29             m++;
30             d=1;
31             continue;
32         }
33         if(m==2&&!isleapyear(y)&&d==29){
34             m++;
35             d=1;
36             continue;
37         }
38     }
39     cout<<y<<"-"<<m<<"-"<<d;
40 }

②Excel法:虽然Excel没法处理1970年之前的日期问题,我们可以对1777做处理。

 

 

 

推荐阅读