试题 C: 跑步锻炼
本题总分:10 分
【问题描述】
小蓝每天都锻炼身体。正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2 千米。小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年
10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
————————————————
package name1;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
public class textt {
public static boolean f(int n) {
return n%400==0||n%4==0&&n%100!=0;
}
public static void main(String[] args) {
//31 29 31 30 31 30 31 31 30 31 30 31
Calendar calendar = Calendar.getInstance();
// 设置日期为: 2020.1.21
int sum = 0;//千米
int dayday=0;
int[]arr=new int [] {31,28,31,30,31,30,31,31,30,31,30,31};
int[]arr1=new int [] {31,28,31,30,31,30,31,31,30,1};
for(int n=2000;n<2020;n++) {
if(f(n)) {
arr[1]=29;
}else {
arr[1]=28;
}
calendar.set(Calendar.YEAR,n);//一年多少号
for(int i=0;i<arr.length;i++) {//月
calendar.set(Calendar.MONTH,i);
for(int j=1;j<=arr[i];j++) {//日
calendar.set(Calendar.DAY_OF_MONTH,j);
int dayone=calendar.get(Calendar.DAY_OF_WEEK);
if(j==1) {
sum+=2;
continue;
}
if(dayone==2) {//判断是不是星期一是就跑两千米
sum+=2;
continue;
}
sum+=1;
}
}
}
// 获取2020.1.21是星期几
//8448
System.out.println(sum);
for(int n=2020;;) {
if(f(n)) {
arr1[1]=29;
}else {
arr1[1]=28;
}
calendar.set(Calendar.YEAR,n);//一年多少号
for(int i=0;i<arr1.length;i++) {//月
calendar.set(Calendar.MONTH,i);
for(int j=1;j<=arr1[i];j++) {//日
calendar.set(Calendar.DAY_OF_MONTH,j);
int dayone=calendar.get(Calendar.DAY_OF_WEEK);
if(j==1) {
sum+=2;
continue;
}
if(dayone==2) {//判断是不是星期一是就跑两千米
sum+=2;
continue;
}
sum+=1;
}
}
break;
}
System.out.println(sum+"答案");
}
}
8879答案 用api加闰年判断