3 条题解

  • 0
    @ 2026-4-1 19:41:29
    #include <iostream>
    #include <iomanip>
    #include <string>
    using namespace std;
    
    // 获取某月的天数
    int getDaysInMonth(int year, int month) {
        int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        return days[month - 1];
    }
    
    // 计算某年某月1号是星期几
    int getWeekday(int year, int month, int day) {
        if (month == 1 || month == 2) {
            month += 12;
            year--;
        }
        int weekday = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
        return weekday; 
    }
    
    // 输出日历
    void printCalendar(int year, int month) {
        // 获取当月天数
        int daysInMonth = getDaysInMonth(year, month);
    
        // 获取1号是星期几(0=星期一, 6=星期日)
        int firstDayWeek = getWeekday(year, month, 1);
    
        // 输出星期标题
        cout << "MON TUE WED THU FRI SAT SUN" << endl;
    
        // 输出第一行的空格(对齐用)
        // 每个日期占4个字符(一个空格+3个字符),第一个日期前不需要空格
        for (int i = 0; i < firstDayWeek; i++) {
            cout << "    "; // 4个空格,对应一个日期占位
        }
    
        // 输出日期
        for (int day = 1; day <= daysInMonth; day++) {
            // 右对齐,宽度为3,让个位与字母对齐
            cout << setw(3) << day;
    
            // 如果不是周日,输出空格分隔
            if ((firstDayWeek + day) % 7 != 0) {
                cout << " ";
            }
            else {
                // 周日换行
                cout << endl;
            }
        }
    
        // 如果最后一行没有换行,补一个换行
        if ((firstDayWeek + daysInMonth) % 7 != 0) {
            cout << endl;
        }
    }
    
    int main() {
        int month;
        cin >> month;
        printCalendar(2025, month);
    
        return 0;
    }
    

    信息

    ID
    3409
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    158
    已通过
    51
    上传者