蓝桥杯真题 C语言 高斯日记

题目

题目标题:高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如: 4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于: 1777年4月30日。
在高斯发现的一个重要定理的日记上标注着: 5343, 因此可算出那天是: 1791年12月15日。
高斯获得博士学位的那天日记上标着: 8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是: yyyy-mm-dd,例如: 1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。

注意点

出生日算第一天,所以5343天循环是写为5342,8113写为8112
加Continue是为了提高效率。

#include<stdio.h>

bool isrunyear(int y){
	return (y%4 == 0 && y%100 != 0 ) || (y%400==0);
}
int main(){
	//出生日期 
	int y=1777;
	int m=4;
	int d=30;	
	//模拟翻日历
	for(int i=0;i<8112;i++){
		d++;
		//年的最后一天 
		if(m==12 && d==32){
			y++;
			m=1;
			d=1;
			continue;
		}
		if((m==1 || m==3 || m==5 ||m==7||m==8||m==10)&& d==32){
			//判断1357810月的最后一天 31天的
			m++;
			d=1;
			continue;
		}
		if((m==4 || m==6 || m==9 ||m==11)&& d==31){
			//判断4 6 9 11月份的最后一天 30天的 
			m++;
			d=1;
			continue;
		}
		if(m==2&& isrunyear(y) && d==30 ){
			//判断闰年2月
			m++;
			d=1; 
			continue;
		}
		if(m==2&& !isrunyear(y) && d==29 ){
			m++;
			d=1; 
			continue;
		}
	} 
	printf("%d-%d-%d",y,m,d) ;
	return 0;
} 
发布了12 篇原创文章 · 获赞 2 · 访问量 390

猜你喜欢

转载自blog.csdn.net/Bad_Shepherd/article/details/104592931
今日推荐