无限循环,同时计算日期
问题描述:
我试图解决问题,要求查找在每个工作日的第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 weekDay = 1;
到:
int weekDay = 0;
int week[] = {0,0,0,0,0,0,0,0};
第三种可能的解决方案使用一周范围0..6,即改变天
和更改:
if (weekDay > 7)
weekDay = 1;
到:
if (weekDay > 6)
weekDay = 0;
答
关接一个。您的week[]
数组有7个元素,索引为0..6。你写信给week[7]
,它会覆盖你不想要的东西,例如,变量为year
。
哈哈,这是USACO – 2011-03-10 16:29:47
你还可以发布numberOfDays功能吗?如果它改变年份或N,则可能是解释。 – ajuc 2011-03-10 16:30:25
@The GiG,它是。 – Marijus 2011-03-10 16:30:30