已知 1998年 1 月 1 日是星期四 输入格式 输入第一行包含一个整数 n 表示今年的年份 输出格式 输出只有一行,表示这一年中有多少个月的 5 号是星期五
时间: 2024-10-01 19:11:27 浏览: 41
为了计算给定年份有多少个月的5号是星期五,我们可以使用一个循环遍历每个月份,并判断该月的第一天是星期几。如果第一天是星期四(1998年1月1日是星期四),那么我们就可以检查接下来的第5天是否也是星期五。这个过程需要考虑到闰年和平年的差异。
首先,我们需要知道每个月有多少天。标准的月份(非闰年)有28、30或31天,而2月有28天。闰年的2月有29天。闰年的规则是能被4整除但不能被100整除,或者能被400整除的年份。
这里是一个简单的C++程序实现:
```cpp
#include <iostream>
// 函数用来获取给定日期后的指定天数后的星期几
std::string get_weekday(int year, int month, int day, int days) {
using namespace std::chrono;
using namespace std::literals;
// 获取给定年份和月份的天数
int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (is_leap_year(year)) {
days_in_month[1] = 29; // 闰年2月有29天
}
// 遍历月份,检查5号是哪一天
for (int i = 0; i < 12; ++i) {
if (days == 5 || (days + 6 - days_in_month[i]) % 7 == 0) {
return "星期五";
}
days += days_in_month[i];
}
return "不是星期五"; // 如果没找到符合条件的5号,则返回不是星期五
}
bool is_leap_year(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int n;
std::cin >> n;
// 检查1998年以后的每个年份
for (int current_year = 1998; current_year <= n; ++current_year) {
std::cout << get_weekday(current_year, 1, 1, 0); // 获取每年的第一个月的第一天
for (int month = 2; month <= 12; ++month) { // 循环所有其他月份
std::cout << " " << get_weekday(current_year, month, 1, 5); // 每月的第一天后推5天
}
std::cout << "\n"; // 结果换行
}
return 0;
}
```
阅读全文