文章

77

粉丝

66

获赞

77

访问

6.9k

头像
打印日期(用前缀和写了一下 附注释) 题解:
P1410 华中科技大学机试题
发布于2024年5月6日 00:29
阅读数 100

#include<bits/stdc++.h>
using namespace std;

int y, d;
int month[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int s[13]; // month数组的前缀和

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

int main()
{
    for(int i = 1; i <= 12; i ++) //预处理前缀和
        s[i] += (s[i - 1] + month[i]);
        
    while(cin >> y >> d)
    {
        int m;
        if(cheak(y)) //闰年多一天
            for(int i = 2; i <= 12; i ++)
                s[i] += 1;
                
        for(int i = 1; i <= 12; i ++)
            if(d <= s[i]) 
            {
                m = i;
                break;
            }
            
        if(m > 1) d = d - s[m - 1];
        
        
        printf("%04d-%02d-%02d\n", y, m, d);
        
         if(cheak(y)) //还原前缀合
            for(int i = 2; i <= 12; i ++)
                s[i] -= 1;
    }
    
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发