How to print the Next N Leap years in Java

2025 年 3 月 28 日 | 阅读 4 分钟

在解决闰年问题时,基本观点是应该有 4 年的间隔,这本身是不正确的。日历中不符合其他任何标准的年份都不能是闰年。目标是在日历年连续打印相同类型的年份,如果该年份是闰年;也就是说,为了解释和实现这一点,应该考虑所有在闰年之前或符合闰年标准的年份。

示例 1

输入

int year = 2024

int N = 5

输出

接下来的 5 个闰年如下:

2024

2028

2032

2036

2040

解释

该示例显示了从 2024 年开始的以下五个 闰年。2024 年是闰年,因为它满足闰年标准,即能被四整除但不能被一百整除。因此,列出了 2024 年。由于 2028 年能被 4 整除,因此将是下一个闰年。从 2028 年到 2040 年,闰年每四年一次。

示例 2

输入

int year = 2020

int N = 15

输出

接下来的 15 个闰年如下:

2020

2024

2028

2032

2036

2040

2044

2048

2052

2056

2060

2064

2068

2072

2076

解释

示例中显示了从 2020 年开始的以下 15 个闰年。2020 年列在列表中,因为它已经是闰年(能被四整除但不能被一百整除)。2024 年将是下一个闰年,因为 2024 年能被 4 整除。2024 年之后,闰年每四年一次:2028、2032、2036,依此类推。

方法

将问题解决分为两部分很容易。第一部分的目标是确定是否发生闰年并编写必要的代码。第二部分仅关注跟踪每次出现闰年时计数,并使其与第一部分同步。

  • 为了被指定为闰年,年份必须满足特定要求。
  • 年份应该大于 400。
  • 年份应该是 4 的倍数,而不是 100 的倍数。

算法

步骤 1:在确定一个数是否能被整除时,使用“4”的条件。如果这个数能被 4 整除,检查将继续;如果不能,它很可能不是闰年。

步骤 2:此处获得的年份已经能被四整除,满足能被 100 整除的条件。如果年份仍然满足前一个要求并且能被 100 整除,它将进入下一个条件检查。如果这个数不能被 100 整除,那么它肯定不是闰年。

步骤 3:此处获得的年份已经能被 4 和 100 整除,满足能被 400 整除的条件。此外,如果年份能被 400 整除,那么它无疑是闰年;否则,它无疑不是。

步骤 4:此处获得的年份现在是闰年,打印闰年相对简单。

步骤 4.1:将一个变量的初始值标识为 0,以保存闰年的计数。

步骤 4.2:当确定年份是闰年时,计数会增加。

步骤 4.3:在计算条件时进行迭代;如果条件未满足,只需返回并检索过去满足条件的年份。

实施

文件名:PrintNleapYears.java

输出

 
2028
2032
2036
2040
2044   

复杂度分析

上述代码的时间复杂度为 O(N),其中“N”是年份的数量,空间复杂度为 O(1)。