题解
输出月历
1 条题解
-
0
解题思路
要输出 2020 年某月的月历。先要知道每月 1 号是星期几:2020 年 1 月 1 日是星期三,往后每过一个月,1 号的星期就往后推"上个月的天数 % 7"天。
输出格式:第一行是星期日到星期六的字母(
S M T W T F S),每个字母占 5 位;日期按每格 5 位左对齐打印,1 号前面空出对应星期数的格子,满 7 个换一行。参考代码
#include <iostream> using namespace std; int main() { int m; cin >> m; // 2020年是闰年,2月29天 int days[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; int first[13]; // 每月1号是星期几(0=星期日 ... 6=星期六) first[1] = 3; // 2020年1月1日是星期三 for (int i = 2; i <= 12; i++) first[i] = (first[i-1] + days[i-1]) % 7; cout << "S M T W T F S" << endl; // 1号前面空几列 for (int col = 0; col < first[m]; col++) cout << " "; int d = 1; while (d <= days[m]) { cout << d; // 每格占5位(数字后补空格) if (d < 10) cout << " "; else cout << " "; // 到星期六换行,或最后一天换行 if ((first[m] + d - 1) % 7 == 6 || d == days[m]) cout << endl; d++; } return 0; }复杂度分析
只循环 31 天,时间复杂度 O(1),额外空间复杂度 O(1)。
- 1