测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A23697. 日历制作

填空题 中等

题目描述

日历制作

题目描述

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

具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN ,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,2025 年 9 月 1 日是星期一,在输出九月的日历时,1 号的个位 1 就需要与星期一 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 完成日历的制作吗?

输入格式

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

输出格式

输出包含若干行,表示 2025 年 m 月的日历。

样例

输入样例 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

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≤12。


参考答案

#include <algorithm> #include <cstdio> using namespace std; int days[20] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int main() { int m; scanf("%d", &m); printf("MON TUE WED THU FRI SAT SUN\n"); int d = days[m]; int w = 1; if (m > 9) { for (int i = 9; i < m; i++) w = (w + days[i] - 1) % 7 + 1; } else if (m < 9) { for (int i = 8; i >= m; i--) w = ((w - days[i]) % 7 + 7) % 7; if (w == 0) w = 7; } for (int i = 1; i < w; i++) printf(" "); for (int i = 1; i <= d; i++) { printf("%3d", i); w = w % 7 + 1; if (w == 1 || i == d) printf("\n"); else printf(" "); } return 0; }
上一题 下一题