用java解决以下问题:如果一个日期的日期以 1 结尾(1日、11日、21日、31日)且为星期一,则称这个日期为一好日期。 请问从 1901 年 1 月 1 日至 2024 年 12 月 31 日总共有多少个一好日期。 提示:1901 年 1 月 1 日是星期二。
时间: 2024-11-19 14:12:59 浏览: 31
要解决这个问题,我们可以创建一个 Java 程序,遍历给定的时间范围内的每一天,检查日期是否满足条件。首先,我们需要确定每个月有多少天,并计算每个年份从 1 月 1 日到 12 月 31 日之间的所有日期,同时注意每个月的第一天是星期几。
以下是一个简单的解决方案:
```java
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class OneGoodDateCounter {
public static void main(String[] args) {
int totalOneGoodDates = countOneGoodDates(1901, 1, 1, 2024, 12, 31);
System.out.println("从 1901 年 1 月 1 日至 2024 年 12 月 31 日总共有 " + totalOneGoodDates + " 个一好日期。");
}
public static int countOneGoodDates(int startYear, int startMonth, int startDate, int endYear, int endMonth, int endDate) {
List<LocalDate> oneGoodDates = new ArrayList<>();
LocalDate currentDate = LocalDate.of(startYear, startMonth, startDate);
while (!currentDate.isAfter(LocalDate.of(endYear, endMonth, endDate))) {
if (isMondayAndLastDayOfMonth(currentDate)) {
oneGoodDates.add(currentDate);
}
currentDate = currentDate.plusDays(1);
}
return oneGoodDates.size();
}
private static boolean isMondayAndLastDayOfMonth(LocalDate date) {
int dayOfWeek = date.getDayOfWeek().getValue(); // 1代表周一
int lastDayOfMonth = date.lengthOfMonth(); // 获取该月的最后一天
return dayOfWeek == 1 && lastDayOfMonth % 10 == 1;
}
}
```
在这个程序中,我们首先定义了一个 `countOneGoodDates` 函数,接受起始年、月和日以及结束年、月和日作为参数。然后,我们在一个循环中逐日更新当前日期,检查它是否为星期一且日期尾数为1。如果是,就将这个日期添加到 `oneGoodDates` 列表中。最后返回列表的大小即为符合条件的一好日期总数。
阅读全文