前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【蓝桥杯】2013-A组01 高斯日记

【蓝桥杯】2013-A组01 高斯日记

作者头像
喜欢ctrl的cxk
发布2020-02-13 10:14:58
4980
发布2020-02-13 10:14:58
举报
文章被收录于专栏:Don的成长史

题目描述:

大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?

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

高斯获得博士学位的那天日记上标着:8113。请你算出高斯获得博士学位的年月日。

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

解题思路:

水题,注意考虑年份、月份的进位就行了。①当月份是12 日期是32时年份进位再把月日归1。②大月在日期是32时月份进位再把日期归1。③小月是31时月份进位再把日期归1。④闰年2月在日期为30时月份进位再把日期归1。⑤平年2月在日期为29时月份进位再把日期归1。

AC代码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

bool isLeapYear(int y)
{
    return (y%4==0 && y%100!=0) || (y%400 == 0);
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int y = 1777,m = 4,d = 30;
    int n;
    cin >> n;
    while(--n)
    {
        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)    //大月进入下一个月
        {
            m++;
            d = 1;
            continue;
        }
        if((m==4 || m==6 || m==9 || m==11) && d==31)    //小月进入下一个月
        {
            m++;
            d = 1;
            continue;
        }
        if(m==2 && isLeapYear(y) && d==30)   //闰年2月进入下一月
        {
            m++;
            d = 1;
            continue;
        }
        if(m==2 && !isLeapYear(y) && d==29)   //平年2月进入下一月
        {
            m++;
            d = 1;
            continue;
        }
    }
    cout << y << "-" << m << "-" << d << endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 解题思路:
  • AC代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档