B4414 [GESP202509 三级] 日历制作(不打表 纯靠逻辑)
小 A 想制作2025年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,2025年9月1日是星期一,在输出九月的日历时,1号的个位1就需要与星期一 MON 的最后一个字母 N 对
·
B4414 [GESP202509 三级] 日历制作
题目描述
小 A 想制作 202520252025 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。
具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,202520252025 年 999 月 111 日是星期一,在输出九月的日历时,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,表示需要按照格式输出 202520252025 年 mmm 月的日历。
输出格式
输出包含若干行,表示 202520252025 年 mmm 月的日历。
输入输出样例 #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 121≤m≤12。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; // 严格要求
ll func(ll x){ //判断当前月是多少天
if(x == 1 || x == 3 || x == 5 || x == 7 || x == 8 || x == 10 || x == 12){
return 31;
}
else if(x == 2){
return 28;
}
else{
return 30;
}
}
int main(){
ios :: sync_with_stdio(0); // 提高cin、cout的运行速度
ll n, sum = 0, cnt = 0; //sum是与9月1日的差数天 已知9月1日周一
cin >> n;
cout << "MON TUE WED THU FRI SAT SUN" << endl;
if(n > 9){ //当月份大于9时
for(ll i = 9; i <= n - 1; i++){
sum += func(i); //此后需要过多少天
}
cnt = 1 + (sum % 7); //cnt是第n月的第一天是周cnt 说明前面有cnt - 1个空格位置
//eg:当n等于10 cnt 为 周六
for(ll i = 1; i <= func(n) + cnt - 1; i++){
if(i <= cnt - 1){
cout << " ";
}
else{
cout << setw(3) << setfill(' ') << i - cnt + 1<< " ";
}
if(i % 7 == 0){ //需要换行(此前空格位置也要算)
cout << endl;
}
}
}
else{
for(ll i = n; i < 9; i++){
sum += func(i); //此前多少天
}
cnt = 1 + 7 - (sum % 7);
if(cnt == 8){ //注意9月就可以
cnt = 1;
}
for(ll i = 1; i <= func(n) + cnt - 1; i++){
if(i <= cnt - 1){
cout << " ";
}
else{
cout << setw(3) << setfill(' ') << i - cnt + 1<< " ";
}
if(i % 7 == 0){
cout << endl;
}
}
}
return 0;
}
更多推荐



所有评论(0)