首页 > 其他 > 详细

L2 - 日历

时间:2020-10-25 22:47:00      阅读:35      评论:0      收藏:0      [点我收藏+]

技术分享图片

题解

  这一题,乍一看,很简单,初始时我也这么以为,模拟了一下结果TLE了,后来再把天数减到小于一年时,又Error了。

       后来重新做了一下,估计是,闰年的状态使用了上一次的结果导致,其实直接对第二月赋值即可,真是想多了啊/(ㄒoㄒ)/~~。

#include <iostream>
using namespace std;

int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
string week[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int r;
int y = 2020, m = 1, d = 1, w = 5; 

int isleap(int x)
{
    return x % 4 == 0 && x % 100 != 0 || x % 400 == 0;
}

void caltime(int r)
{
    while (r--) {
        if (d == month[m]) {
            if (m == 12) {
                ++y;
                if (isleap(y)) month[2] = 29;
                else month[2] = 28;
                m = 1;
            }
            else {
                ++m;
            }
            d = 1;
        }
        else {
            ++d;
        }
        ++w;
        if (w == 7) w = 0;
    }
    cout << y << -;
    if (m < 10) cout << 0 << m;
    else cout << m;
    cout << -;
    if (d < 10) cout << 0 << d;
    else cout << d;
    cout << " ";
    cout << week[w] << endl;
}

int main()
{
    cin >> r;
    while (r != -1) {
        y = 2000, m = 1, d = 1, w = 5;
        int ys = 366; // 初始 2000 
        while (ys <= r) {
            w = (w + ys) % 7;
            r -= ys;
            ++y;
            if (isleap(y)) ys = 366;
            else ys = 365;
        }
        if (isleap(y)) month[2] = 29;
        else month[2] = 28;
        caltime(r);
        cin >> r;
    }
    return 0;
}

 

L2 - 日历

原文:https://www.cnblogs.com/xuwenchao/p/13875450.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!