#include<iostream>
using namespace std;
int main(){
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};//月份
int weekday = 1; //周日算为 0
int b[7] = {};//每天出现的次数
int n;cin>>n;
for(int i = 0 ;i < n; i ++ ){
int years = 1900 + i;
if((years % 4 == 0 && years % 100 != 0) || years % 400 == 0) a[1] = 29; //闰年否
else a[1] = 28;
for(int j = 0 ; j < 12 ; j ++ ){ //每月 13 号统计
b[(weekday + 12) % 7] ++ ;
weekday = (weekday + a[j]) % 7;
}
}
for (int i = 0;i < 7;i++){
cout<<b[(6 + i) % 7]<<' ';
}
}
O(12n)就解决了
记录每个月的第一天,和每个月分的天数就相当于知道这个月所有日子了,当然,13号也不例外。
不是很推荐用公式,因为很不实用,并没有降低如上方法的时间复杂度