【发布时间】:2011-07-12 20:53:30
【问题描述】:
我正在尝试解决问题,该问题要求找出 1990+N-1 年期间每个工作日出现第 13 天的次数。
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;
}
【问题讨论】:
-
你也可以发布 numberOfDays 函数吗?如果它改变年份或 N,它可能是解释。
-
是什么让您认为您的问题在于“年”循环而不是其他问题? ...我猜这与您的 numberOfDays() 函数有关。
-
更喜欢预增量而不是后增量和构造函数初始化而不是赋值,否则 Paul 涵盖了您的问题之一。数组从索引 0 开始。
int week[7];具有week[0]到week[6]元素。
标签: c++ for-loop infinite-loop