B4414 [GESP202509 三级] 日历制作

题目描述

小 A 想制作 202520252025 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。

具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,202520252025999111 日是星期一,在输出九月的日历时,111 号的个位 111 就需要与星期一 MON 的最后一个字母 N 对齐。九月的日历输出效果如下:

MON TUE WED THU FRI SAT SUN
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

你能帮助小 A 完成日历的制作吗?

输入格式

一行,一个正整数 mmm,表示需要按照格式输出 202520252025mmm 月的日历。

输出格式

输出包含若干行,表示 202520252025mmm 月的日历。

输入输出样例 #1

输入 #1

9

输出 #1

MON TUE WED THU FRI SAT SUN
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

输入输出样例 #2

输入 #2

6

输出 #2

MON TUE WED THU FRI SAT SUN
                          1
  2   3   4   5   6   7   8
  9  10  11  12  13  14  15
 16  17  18  19  20  21  22
 23  24  25  26  27  28  29
 30

说明/提示

对于所有测试点,保证 1≤m≤121 \leq m \leq 121m12

解析

模拟,详见代码:

#include<bits/stdc++.h>
using namespace std;
int m;
int a[13]={0,3,6,6,2,4,7,2,5,1,3,6,1};//a[i]表示第i个月的1日是星期几
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//d[i]表示第i个月有几天
int main(){
    int m;
    cin>>m;
    cout<<"MON TUE WED THU FRI SAT SUN\n";
    for(int i=1;i<a[m];i++){
        cout<<"    ";
    }
    for(int i=1;i<=d[m];i++){
        cout<<setw(3)<<i;
        if ((i+a[m]-1)%7==0){//星期日之后换行
            cout<<"\n";
        }else{
            cout<<" ";
        }
    }
	return 0;
}
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐