我正在尝试解决要求查找第 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/