(打印月历)输入月份 $m(1 \leq m \leq 12)$ ,按一定格式打印 $2015$ 年第 $m$ 月的月历。 例如,$2015$ 年一月的月历打印效果如下(第一列为周日):
S M T W T F S
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 31
#include<iostream>
using namespace std;
const int dayNum[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int m, offset, i;
int main() {
cin >> m;
cout << "S\tM\tT\tW\tT\tF\tS" << endl; //'\t'为tab制表符
___(1)___
for (i = 1; i < m; i++)
offset = ___(2)___;
for (i = 0; i < offset; i++)
cout << '\t';
for (i = 1; i <= ___(3)___; i++) {
cout << ___(4)___;
if (i == dayNum[m] || ___(5)___ == 0)
cout << endl;
else
cout << '\t';
}
return 0;
}
1. D。
2. C。
3. B。
4. A。
5. B。
这道题主要是对输出的控制部分。我们主要需要控制的就是需要知道第一天是星期几以及什么时候要换行。在这段代码中,我们使用 $offset$ 来解决了这个问题。通过这个变量来这个月的第一天是星期一的后几天。从题目中给的例子中可以得知,一月份空了 $4$ 天,所以初始值应该是 $4$ ,之后根据每月的天数计算在第 $m$ 个月时的偏移即可。