蓝桥杯2013年C++ B组 1_高斯日记

高斯日记

第一题: 高斯日记
题目描述
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如: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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值