1 条题解
-
0
G3020 [GESP202509 三级] 日历制作 题解
知识点:日期计算、二维输出、格式化输出。
解题思路
用平年每月天数表求月首之前经过的天数,据题面固定年份的1月1日为周三推得该月首列。输出星期表头,再按宽度3排日期,每周7列。
为什么正确
月份偏移按7取余正确定位星期,逐日移动一列、周末换行即可生成整月日历。
易错点
当前题固定平年,不能套入运行当天的年份;保留列宽、行首空格和周末换行。
复杂度
时间O(12+当月天数),空间O(1)。
参考代码(C++17)
#include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int m; cin>>m; int ds[]= { 31,28,31,30,31,30,31,31,30,31,30,31 } ; int pre=0; for(int i=0;i<m-1;i++)pre+=ds[i]; int start=(2+pre)%7; cout<<"MON TUE WED THU FRI SAT SUN\n"; cout<<string(start*4,' '); for(int d=1;d<=ds[m-1];d++) { int col=(start+d-1)%7; cout<<setw(3)<<d; if(col==6||d==ds[m-1])cout<<"\n"; else cout<<" "; } }说明
本题解为配套教学整理,非官方题解。复杂度按本页参考实现计算,题库使用12个自行生成的测试点。
- 1