2019年蓝桥杯练习4-高斯的日记

每周一题之4

本周题目是蓝桥杯第四届省赛AB组第一题(填空题),请评论的同学除了给出答案,还要给出你的思路,特别是如果在竞赛中你会怎么做?

[问题描述]

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

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?

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

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

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

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

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

这里的代码仅供参考,注意一下日期推算中的一下细节和思路:

//每周一练/4
#include<stdio.h>
bool isLeapYear(int year) {  //判断是否是闰年 
	if(year%4==0 && year%100!=0)  //是闰年 
        return true;
    else if(year%400==0)   //是闰年 
  	    return true;
    else     //不是闰年 
        return false;
}
int main () 
{
	int year=1777+8113/365;   //年份肯定是这个了,year=1799

	int num=0;
	for(int i=1777;i<year;i++) {  //计算从1777年4月30日到1799年4月30日间隔的天数,(没有算上1777.4.30这一天 ) 
		num=num+365;    //从一年的4月30日到下一年的4月30日间隔365天 
		if(isLeapYear(i)) {  //如果当前年是闰年就加1天 
			num++;
		} 
	}
 	//根据示例,推出需要算上1777年4月30日这一天,所以num要加1 
	num++;
	//num=8036 
    int month=4+(8113-num)/30+1;   //月份。到1799.4.30为止还差8113-num=77天,两个月不够,+1到下个月 
    int m=0;
    for(int j=5;j<month;j++) {  //因为前面已经计算到了4.30,所以从5月开始 ,计算从4.30到6.30之间的天数 ,不包括4.30这一天 
    	m=m+30;
    	if(j==5 || j==7 || j==8 || j==10 || j==12) {
    		m++;
		}
	}
   	int day=(8113-num)-m;   //天数。到6.30为止还差8113-num-m=16天,day=16 
	printf("%d-%d-%d",year,month,day);
 	return 0;	
} 

分析:一图让你搞懂日期的推算:

也可以借助Excel分析:

全部评论

相关推荐

孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务