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;
}
上一题
下一题