题目解析
* 输入输出:输入一个整数 mmm(1≤m≤121 \le m \le 121≤m≤12)表示月份。输出 202520252025 年 mmm 月的格式化日历,首行为星期标题,后续为日期,日期个位需与对应星期缩写末字母对齐。
* 数据范围:月份范围 111 到 121212,202520252025 年非闰年,222 月为 282828 天。
* 复杂度要求:固定输出 424242 个位置(666 行 ×\times× 777 列)或更少,时间复杂度 O(1)O(1)O(1),空间复杂度 O(1)O(1)O(1)。
* 算法知识点:Zeller公式(蔡勒公式)、日期计算、格式化输出
思路解析
1. 计算星期:利用 Zeller 公式 计算 202520252025 年 mmm 月 111 日是星期几。由于 Zeller 公式中 111 月和 222 月需视为上一年的 131313 月和 141414 月,代码中进行了特殊处理。公式计算结果 hhh 的范围为 000(周六)到 666(周五),通过映射数组 weekdays 转换为:周一=111,周二=222,...,周六=666,周日=777,方便后续定位。
2. 确定月份天数:使用数组 months 存储 202520252025 年各月天数(非闰年,222 月为 282828 天)。
3. 格式化输出:
* 首行固定输出星期标题,每个缩写占 333 位字符。
* 使用循环遍历 111 到 424242(最多 666 行),每个位置占 333 位宽度(%3d 或三个空格)。
* 当循环变量 iii 等于计算出的星期值时,开始填入日期(从 111 开始)。
* 填入日期前输出空格占位,填入后按 333 位右对齐格式输出;日期填完后提前终止循环。
* 每 777 个位置换行,否则输出空格分隔。
完整代码