错误的代码和幸运的回答

时间:2014-03-08 19:07:55

标签: java

剧透警报!!对于项目欧拉问题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);
}
}

1 个答案:

答案 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;

这应该解决它。