LQ0200 高斯日记日期计算
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0200 高斯日记日期计算相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2013初赛 C++ A组A题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777 年 4 月 30 日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791 年 12 月 15 日。
高斯获得博士学位的那天日记上标着:8113。
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-ddyyyy−mm−dd, 例如:1980−03−21。
问题分析
日期计算问题,不解释。
AC的C语言程序如下:
/* LQ0200 高斯日记 */
#include <stdio.h>
#define N 8113
int mdays[] = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31;
int leapyear(int year)
return ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) ? 1 : 0;
int main()
int y = 1777, m, d = N + 119;
for (; ;)
int ydays = 365 + leapyear(y);
if (d >= ydays)
d -= ydays, y++;
else
break;
mdays[2] += leapyear(y);
for (m = 1; m <= 12; m++)
if (d > mdays[m])
d -= mdays[m];
else
break;
printf("%04d-%02d-%02d\\n", y, m, d);
return 0;
以上是关于LQ0200 高斯日记日期计算的主要内容,如果未能解决你的问题,请参考以下文章