高斯日记
第一题: 高斯日记
题目描述
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
注意
对于文字表述不清楚的题目,题中给出的示例往往特别重要
如本题中,通过示例的验证可以得出,出生日期已经被记为了第一天
如果把1777年5月1日当成第一天,就直接凉凉了
解题方式
1.使用计算器的日期计算功能
蓝桥杯比赛时允许使用windows下的计算器,excel等基础工具,对于部分填空题,使用这类工具会特别有效。
对于本题,excel是解题最快的方式
2.使用编程的方式解题
1.判断是否闰年
蓝桥杯的比赛中,设计闰年判断的题目特别多,判断是否闰年的方式应该熟记
a.能被4整除而不能被100整除.(如2004年就是闰年,1900年不是)
b.能被400整除.(如2000年是闰年)
也就是
四年一闰,百年不闰,四百年再闰。
if((n%4 == 0 && n%100 != 0) || n %400 == 0)
{}
代码实现
#include<iostream>
using namespace std;
//1777年4月30日
int isgapyear(int yy)
{
if((yy%4==0&&yy%100!=0)||yy%400==0)
return 1;
else
return 0;
}
int main()
{
int yy=1777,mm=4,dd=30;
for(int i=1;i<8113;i++)
{
dd++;
if(mm==12&&dd==32) //½øÄê
{
yy++;
mm=1;
dd=1;
}
if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10) //½øÔÂ
{
if(dd==32)
{
mm++;
dd=1;
}
}
else if(mm==4||mm==6||mm==9||mm==11)
{
if(dd==31)
{
mm++;
dd=1;
}
}
else if(mm==2&&isgapyear(yy))
{
if(dd==30)
{
dd=1;
mm++;
}
}
else if(mm==2&&!isgapyear(yy))
{
if(dd==29)
{
mm++;
dd=1;
}
}
}
cout<<yy<<"-"<<mm<<"-"<<dd<<endl;
return 0;
}