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 高斯日记日期计算的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯-2013年B组真题

蓝桥杯-2013年B组真题

LQ0032 日期问题日期计算+排序

LQ0043 第几天日期计算

LQ0042 星期一日期计算

LQ0002 星系炸弹日期计算