已知: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) {
// 定义2000年1月1日星期六的日期
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;
}