前言一、题目
运行结果:8879 二、代码
前言
看了网上很多的题解,大多数都是利用自定义数组来代表闰年和非闰年,然后判断那年是闰年,总觉得这种方法有点繁杂,就想说能不能利用自带的日期类来直接判断,于是就想到了Calender类,他可以直接判断题目要求的周一和每月一号。然后就是解决最核心的问题,每月的天数不一样,且闰年和非闰年的2月天数也不一样。由于Calender类没有自带判断每月天数的方法,就想到用当月的上一个月的第一天减去一天就得到了当月的总天数。
一、题目 运行结果:8879
二、代码
import java.util.Calendar;
public class 跑步训练 {
//获取当月天数的函数
public static int getDay(int year ,int month) {
Calendar calendar1=Calendar.getInstance();
calendar1.set(Calendar.YEAR,year);
//要设置为下一个月
calendar1.set(Calendar.MONTH, month+1);
calendar1.set(Calendar.DAY_OF_MONTH, 1);
//再减去一天就可以得到当月的最后一天,即当月的总天数
calendar1.add(Calendar.DAY_OF_MONTH,-1);
int day=calendar1.get(Calendar.DAY_OF_MONTH);
return day;
}
//主函数
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
//初始跑步距离
int km=0;
//遍历2000年到2019年
for (int year = 2000; year <= 2019 ; year++) {
calendar.set(Calendar.YEAR,year);
for (int Month = 0; Month < 12; Month++) {
calendar.set(Calendar.MONTH,Month);
//调用获取当月天数的函数
int day=getDay(year,Month);
for(int today=1;today<=day;today++) {
calendar.set(Calendar.DAY_OF_MONTH,today);
//题目条件当月的一号或者周一
if(calendar.get(Calendar.DAY_OF_WEEK)==2 || today==1){
km+=2;
}else {
km++;
}
}
}
}
//2020年只要到9月,所以另外再写一遍
calendar.set(Calendar.YEAR,2020);
for (int Month = 0; Month < 9; Month++) {
calendar.set(Calendar.MONTH,Month);
int day=getDay(2020,Month);
for(int today=1;today<=day;today++) {
calendar.set(Calendar.DAY_OF_MONTH,today);
if(calendar.get(Calendar.DAY_OF_WEEK)==2 || calendar.get(Calendar.DAY_OF_MONTH)==1){
km+=2;
}else {
km++;
}
}
}
//十月只有一号,懒得再设置一遍判断,直接在结果加2
System.out.println(km+2);
}
}



