24:打印月历
总时间限制:
1000ms
内存限制:
65536kB
描述
给定年月,打印当月的月历表。
输入
输入为一行两个整数,第一个整数是年份year(1900 ≤ year ≤ 2099),第二个整数是月份month(1 ≤ month ≤ 12),中间用单个空格隔开。
输出
输出为月历表。月历表第一行为星期表头,如下所示:
Sun Mon Tue Wed Thu Fri Sat
其余各行一次是当月各天的日期,从1日开始到31日(30日或28日)。
日期数字应于星期表头右对齐,即各位数与星期表头相应缩写的最后一个字母对齐。日期中间用空格分隔出空白。
样例输入
2006 5
样例输出
Sun Mon Tue Wed Thu Fri Sat
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
提示
闰年判断方法:能被4整除但不能被100整除,或者能被400整除。
1900年1月1日是周一。
题解:
这道题是典型的模拟日期变更的题目。为了节省时间提高效率,可把目标年份的1月1日的星期算出来,然后通过循环模拟,最终算出目标月份的1日的星期。
计算部分在本题还算简单,但重要的是如何输出。
首先输出固定格式,
我们知道日历的开头通常都是有空格的(1日是星期天除外),由此我们可以写循环来输出日历前面的空格。
接下来依次输出每个日期,这里又会有个问题,就是换行的问题,这个问题可以通过声明一个变量判断日历是否打印到行尾,是就换行,不是就输出空格。
还有一点细节需要注意,当日期到最后一天时,是不允许有空格出现的,所以我们应该在最后加一个条件判断,这样程序就完整了。