填空题,有两种解法,一种是直接计算有多少天,然后通过天数循环判断周一的数量,之后看日历找到是周一同时又是月初的,直接21*12-2-是周一同时又是月初的数量即可:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
/*
填空题,直接计算答案即可
首先一共多少天,这样先计算出每天跑的,再算周一和月初的
21*365-31-30-30+6(2020年只要10月1日的),然后再算闰年的00,04,08,12,16,20都是闰年,所以要+6
这里每天跑步的数量是7580
*/
//20001月1日是周六
int day = 6;
//一共只有7580天,所以遍历一次下来,同时得到周一数量
int number = 0;
//记录月初(不包含初一)
int month = 0;
for(int i = 0;i<7580;i++){
//判断当前是星期几
day = day%7;
//如果day==1,那么就代表是周一;
if(day==1){
number++;
}
//今天过完了,所以星期数就自增
day++;
}
//月初一共21*12-2,那么就算250天:(-2是因为2020年只到10月份)
//直接看日历,月初和周一在同一天的一共有34天(我觉得直接看日历比在循环里面判断月初好一点)
//那么结果就是
System.out.println(7580+number+250-34);
}
}
另一种是直接用for搞定:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
int sum = 0;
int week = 6;
//年份
for(int year = 2000 ;year<2021;year++){
//正常年份
int array[] = {31,28,31,30,31,30,31,31,30,31,30,31};
//修改闰年的二月份
if( (year%4==0)&&(year%100!=0) || (year%400==0) ){
array[1] = 29;
}
//不是2020年的循环判断,2020年要单独拿出来做循环
if(year!=2020){
//月份
for(int month = 1;month<13;month++){
//天数
for(int i = 0;i<array[month-1];i++){
//先判断当天是否为第一天,如果为该月的第一天且不为周一,那么就多跑1千米{
if(i==0&&(week%7!=1)){
sum++;
}
week = week%7;
if(week==1){
//如果是周一,就要多跑1千米
sum++;
}
week++;
//每一天都要跑1千米
sum++;
}
}
}else{
//月份
for(int month = 1;month<11;month++){
//如果不是十月份,就正常按照上面进行循环
if(month!=10){
for(int i = 0;i<array[month-1];i++){
//先判断当天是否为第一天,如果为该月的第一天且不为周一,那么就多跑1千米{
if(i==0&&(week%7!=1)){
sum++;
}
week = week%7;
if(week==1){
//如果是周一,就要多跑1千米
sum++;
}
week++;
//每一天都要跑1千米
sum++;
}
}else{
//如果是十月份,那么这天肯定不是周一,但是是月初,所以要+2;
sum+=2;
}
}
}
}
System.out.println(sum);
}
}
结果是: