13号星期五统计:C++程序计算N年内13号落在星期五的次数
13号星期五统计:C++程序计算N年内13号落在星期五的次数
本文提供一个C++程序,用于计算N年(1900年1月1日至1900+N-1年12月31日)内13号落在星期五的次数。程序考虑了闰年规则,并通过循环遍历每个月的13号,判断星期几并进行统计。
程序代码
#include <iostream>
int countThirteenths(int N) {
int count = 0; // 计数器
int weekday = 1; // 1900年1月1日是星期一
for (int year = 1900; year < 1900 + N; year++) {
for (int month = 1; month <= 12; month++) {
// 判断每个月的天数
int days;
if (month == 2) {
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
days = 29; // 闰年2月有29天
} else {
days = 28; // 平年2月有28天
} } else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30; // 4, 6, 9, 11月有30天
} else {
days = 31; // 其他月份有31天
}
// 判断十三号是星期几
if (weekday == 7) {
weekday = 1; // 星期日重置为星期一
} else {
weekday++; // 星期一到星期六递增
}
if (weekday == 5) {
count++; // 如果十三号是星期五,则计数器加一
}
// 更新星期几的变量
weekday += (days - 28) % 7;
if (weekday > 7) {
weekday -= 7;
}
}
}
return count;
}
int main() {
int N;
std::cin >> N;
int result = countThirteenths(N);
std::cout << result << std::endl;
return 0;
}
程序说明
该程序首先定义了一个countThirteenths函数,参数为年数N,返回值为十三号落在周一到周日的次数。在函数中,使用两层循环来遍历每个月的十三号,并根据规则判断星期几。如果星期几为5(星期五),则计数器加一。
在main函数中,首先读取输入的年数N,然后调用countThirteenths函数计算结果,并输出。
示例
例如,输入N为100,程序会输出171。这表示在1900年1月1日至2000年12月31日这段时间内,一共有171个13号落在星期五。
原文地址: http://www.cveoy.top/t/topic/pFoE 著作权归作者所有。请勿转载和采集!