已知: 2000 2000 年 1 1 月 1 1 日为星期六。求第 n 个星期 x( 0 ∼ 6 0∼6,表示星期日~星期六),是 2000 2000 年的几月几号。

已知:2000 年 1 月 1 日为星期六。求第 n 个星期 (0∼6表示星期日~星期六),是 2000 年的几月几号。

#include <iostream>

// 定义每周的天数
const int DAYS_PER_WEEK = 7;

// 判断是否为闰年
bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// 获取第n个星期x的日期
void getDateOfNthWeekday(int n, int x) {
    // 定义200011日星期六的日期
    int year = 2000;
    int month = 1;
    int day = 1;
    int weekday = 6; // 星期六为第6天

    // 计算距离目标日期的天数
    int days = n * DAYS_PER_WEEK + x - weekday;

    // 循环迭代,更新日期
    while (days > 0) {
        day++;
        if (day > 31 ||
            (month == 4 || month == 6 || month == 9 || month == 11) && day > 30 ||
            month == 2 && (day > 29 || (day > 28 && !isLeapYear(year)))) {
            day = 1;
            month++;
        }
        if (month > 12) {
            month = 1;
            year++;
        }
        days--;
    }

    // 输出结果
    std::cout << "第" << n << "个星期" << x << "的日期为:" << year << "年" << month << "月" << day << "日" << std::endl;
}

int main() {
    int n, x;
    std::cout << "请输入n:";
    std::cin >> n;
    std::cout << "请输入x(0~6,0表示星期日,6表示星期六):";
    std::cin >> x;

    getDateOfNthWeekday(n, x);

    return 0;
}