我的代码和幸运答案错误



扰流板警报!对于项目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;

这应该修复。

最新更新