1 条题解

  • 0
    @ 2026-10-18 18:33:52

    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

    信息

    ID
    688
    时间
    1000ms
    内存
    512MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者