如果一个日期的日期以 1 结尾(1日、11日、21日、31日)且为星期一,则称这个日期为一好日期。 请问从 1901 年 1 月 1 日至 2024 年 12 月 31 日总共有多少个一好日期。 提示:1901 年 1 月 1 日是星期二。用cpp解决开问题
时间: 2024-11-19 21:07:28 浏览: 36
为了计算从1901年1月1日至2024年12月31日之间的一好日期总数,我们可以编写一个程序来遍历每个年份和月份,检查每个月的第一天是否为星期一并且日期以1结尾。这里我们假设使用C++来实现这个算法:
首先,我们需要创建一个函数来确定给定日期是否是一好日期。然后我们将遍历所有这些年份,对每个月执行该检查。
```cpp
#include <iostream>
#include <vector>
#include <ctime>
bool isOneGoodDate(int year, int month) {
struct tm date = {0};
date.tm_year = year - 1;
date.tm_mday = 1;
time_t t = mktime(&date);
if (t == -1 || !isoweekday(t) == 1 || !(date.tm_mday % 10 == 1)) {
return false;
}
return true;
}
int countOneGoodDates(int startYear, int endYear) {
int oneGoodDates = 0;
for (int year = startYear; year <= endYear; ++year) {
for (int month = 1; month <= 12; ++month) {
if (isOneGoodDate(year, month)) {
++oneGoodDates;
}
}
}
return oneGoodDates;
}
int main() {
int startDate = 1901;
int endDate = 2024;
int totalOneGoodDates = countOneGoodDates(startDate, endDate);
std::cout << "从1901年1月1日至2024年12月31日,总共有 " << totalOneGoodDates << " 个一好日期。\n";
return 0;
}
```
当你运行这段代码时,它将输出从1901年到2024年之间的所有一好日期总数。注意,`isoweekday` 函数用于获取星期几(返回值范围从0(周日)到6(周六)),所以我们需要将其转换为星期一(值为1)。
阅读全文