简单的模拟题,要判断闰年,其次观察日历我们可以发现,下一个月的十三号可以又上一个月13号递推而来,(本月天数%7+上个月13号的星期几+7)%7,注意最后还要把最后一次的减掉,因为我们只算到12月31日之前,最后一次算的是1900+n的一月13号的星期几
#include<iostream>
#include<unordered_map>
using namespace std;
int st[12]={31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int x){
if((x%4==0&&x%100)||(x%100==0&&x%400==0))return true;
return false;
}
int main(){
unordered_map<int,int> cnt;
int n,tmp;
cin>>n;
cnt[6]++;
tmp=6;
for(int i=0;i<n;i++){
if(check(1900+i))st[1]=29;
else st[1]=28;
for(int j=0;j<12;j++){
tmp=(st[j]%7+tmp+7)%7;
cnt[tmp]++;
}
}
cnt[tmp]--;
cout<<cnt[6]<<' ';
for(int i=0;i<6;i++)cout<<cnt[i]<<' ';
return 0;
}