枚举 模拟
主要是处理好星期几的部分
rem 余数这里: 0 星期天、 1 星期一、 2 星期二、 3 星期三、 4 星期四、 5 星期五、 6 星期六
import java.util.*;
import static java.lang.System.out;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
// 月份的天数
int[] days = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
int[] ans = new int[7];
// rem 表示 1900 年 1 月 1 日是星期一
// r 是 13 号对应星期几的余数
int rem = 1, r = 13 % 7;
// 年
for(int y = 1900; y < 1900 + n; y++) {
boolean t = isRun(y);
// 月
for(int m = 0; m < 12; m++) {
int cnt = days[m];
if(t && m == 1) cnt++;
// 确定 13 号是星期几
ans[(rem + r) % 7]++;
// 确定下一个月的一号是星期几
rem = (cnt % 7 + rem) % 7;
}
}
for(int i = 0; i < 7; i++) {
out.print(ans[i] + " ");
}
}
// 判断是否为闰年
public static boolean isRun(int year){
if(year % 100 == 0 && year % 400 == 0) return true;
if(year % 4 == 0 && year % 100 != 0) return true;
return false;
}
}