远离循环

Stepping away from loops

我在倒数一年中有多少个第一个星期日让我们说 2000/1/1 和 2020/5/2

我已经为它创建了运行良好的函数,但问题是我在其中嵌套了循环,这使得它非常慢。

int sundaycount = 0;
for (i = year1; i<year2; i++) { // years
    for (j = 0; j<12; j++) {
        if (isdate(i, j, 1)) {
            sundaycount++;
        }
    }
}

您应该 post isdate() 的代码。我们无法验证您的问题。我无法相信对 mkdate() 的 240 次调用可以算作 slow.

如果你真的想使用更少的计算能力,计算第一年 1 月 1 日的工作日并迭代年份范围,通过添加天数模 7 来测试每个月。小心点有闰年。这可能会消耗少一点 CPU,但我怀疑你是否可以测量它。