c++ - 计算日期时无限循环

标签 c++ for-loop infinite-loop

我正在尝试解决要求查找第 13 天在 1990+N-1 年期间的每个工作日出现多少次的问题。

int weekDay = 1;
int week[] = {0,0,0,0,0,0,0};

N = 20;

for (int year = 1990; year <= 1990+N-1; year++){
    for (int month = 1; month <= 12; month++){
        int days = numberOfDays(year,month);

        for (int day = 1; day <= days; day++){
            if (day == 13)
                week[weekDay] += 1;

            weekDay += 1;
            if (weekDay > 7)
                weekDay = 1;
        }
    }
}

这是我的解决方案,但是我在一年中陷入了无限循环并且似乎无法修复它。

编辑:numberOfDays 函数。

int numberOfDays(int year, int month)
{
    if (month == 2 && leapYear(year))
        return 29;
    else if (month == 2)
        return 28;

    if (month == 9 || month == 4 || month == 6 || month == 11)
        return 30;

    return 31;
}

最佳答案

您使用的是 1..7 范围内的工作日,但您的直方图数组 week[] 的索引为 0..6。


一种可能的解决方案——改变:

            week[weekDay] += 1;

到:

            week[weekDay - 1] += 1;

另一种解决方案 - 使 week[] 大一个元素并且不使用元素 0,即更改:

int week[] = {0,0,0,0,0,0,0};

到:

int week[] = {0,0,0,0,0,0,0,0};

第三种可能的解决方案 - 使用 0..6 范围内的工作日,即更改:

int weekDay = 1;

到:

int weekDay = 0;

和改变:

        if (weekDay > 7)
            weekDay = 1;

到:

        if (weekDay > 6)
            weekDay = 0;

关于c++ - 计算日期时无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5262667/

相关文章:

java - 有没有一种方法可以在使用列表时不更改列表中的原始值?

c# - 如何在for循环中保留变量的位数

c++ - Floor vs int 转换差异

c++ - 小 N 的 std::map 与 unordered_map 内存占用

JavaScript For 循环提前中断

c++ - (C++) 不停止在 std::cin 上并进入无限循环吗?

c - 嵌套 switch 导致无限循环

javascript - 我如何陷入尝试的 JavaScript 包含?

c# - 如何在 MessageBox 上显示 FARPROC 内存地址

c++ - OpenMP 和优化 vector 运算