剧透警报!!对于项目欧拉问题19。
问题是从1901年到2000年这个月的第一天有多少个星期日。鉴于信息:1900年1月1日是星期一,Jan& 3月31日,4月,6月等30天,闰年发生在任何一年可被4整除,但不能在一个世纪上除非它被400整除。在这种情况下适用于2000年。
我得到了正确的答案,但是当我用真实的日历检查我的结果时,事实证明我的代码是星期六。我不明白为什么会这样做,有人可以帮忙吗?!
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);
}
}
答案 0 :(得分:1)
您忘记添加到代码中以检查1900年的节日是否应该有29天或28天。由于1900年不是闰年,它不应该在1900年有29天。
else if (month == 2 && year % 4 == 0 && year != 1900)
dayLimit = 29;
// February not leap year
else if (month == 2)
dayLimit = 28;
这应该解决它。