C++ 代码
#include <bits/stdc++.h>
using namespace std;
int N;
int a[7]; // 存储顺序:星期天、星期一~六
// 判断是否为闰年(是闰年则返回true,否则返回false)
bool judge(int year){
return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
}
// 前一个月的13号到下一个月的13号的日期长度
int month[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, // 平年
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} // 闰年
};
int main(){
cin >> N;
int cnt = 13;
a[6] = 1;
for(int y = 0; y < N; y++){
int cur_year = 1900 + y;
for(int m = 0; m < 12; m++){
if(y == N - 1 && m == 11) break; // 对最后一年的最后一个月做特判
cnt += month[judge(cur_year)][m];
a[cnt % 7]++;
}
}
cout << a[6] << " ";
for(int i = 0; i < 6; i++) cout << a[i] << " ";
return 0;
}