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 &lt; 1900 + N; year++) {
    for (int month = 1; month &lt;= 12; month++) {
        // 判断每个月的天数
        int days;
        if (month == 2) {
            if (year % 400 == 0 || (year % 4 == 0 &amp;&amp; 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 &gt; 7) {
            weekday -= 7;
        }
    }
}

return count;

}

int main() { int N; std::cin >> N;

int result = countThirteenths(N);
std::cout &lt;&lt; result &lt;&lt; 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录