扰流板警报!对于项目Euler问题19。
问题是从1901年至2000年的一个月的第一个周日落入了多少周日。给定信息:1900年1月1日是星期一,Jan&3月等有31天,4月,6月等30天,并且在400年均匀排除的任何一年都在任何一年中均匀排除。
我得到了正确的答案,但是当我用真实日历检查结果时,事实证明我的代码在计数星期六。我不明白为什么这样做,有人可以帮忙吗?
public class Sunday {
public static void main(String[] args) {
int sundayCount = 0;
int currentday = 0; // monday is 0, sunday will be 6
int dayLimit = 0;
for (int year = 1900; year < 2001; year++) {
for (int month = 1; month < 13; month++) {
// 30 days April, June, September, November
if (month == 4 || month == 6 || month == 9 || month == 11)
dayLimit = 30;
// leap year
else if (month == 2 && year % 4 == 0)
dayLimit = 29;
// February not leap year
else if (month == 2 && year % 4 != 0)
dayLimit = 28;
// Jan, March, May, July, August, October, December
else
dayLimit = 31;
for (int day = 1; day <= dayLimit; day++) {
if (day == 1 && currentday == 6 && year > 1900) {
System.out.println("year: " + year);
System.out.println("month: " + month);
sundayCount++;
}
if (currentday < 6)
currentday++;
else
currentday = 0;
}
}
}
System.out.println(sundayCount);
}
}
您忘记添加到代码中以检查1900年2月应该有29或28天。由于1900年不是leap年,因此在1900年不应该有29天。
else if (month == 2 && year % 4 == 0 && year != 1900)
dayLimit = 29;
// February not leap year
else if (month == 2)
dayLimit = 28;
这应该修复。