两种方法:1:用
基姆拉尔森
计算
公式(这个公式可以自行百度)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
//定义一波变量
int w,date[7];
int fuc (int y,int m,int d){
if (m==1){
y=y-1;
m=13;
}
if (m==2){
y=y-1;
m=14;
}
w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7;
return w;
}
int main(){
int n;
cin>>n;
for (int i=1900;i<=1900+n-1;i++){
for (int j=1;j<=12;j++){
date[fuc(i,j,13)]++;
}
}
cout<<date[6]<<" "<<date[0]<<" "<<date[1]<<" "<<date[2]<<" "<<date[3]<<" "<<date[4]<<" "<<date[5]<<endl;
return 0;
}
2:用暴力枚举:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
//定义一波变量
int date[7],n,day,week=0;
bool check=false;//判断是否为闰年
int main(){
cin>>n;
for (int i=1900;i<=1900+n-1;i++){
for (int j=1;j<=12;j++){
//首先判断是不是闰年
if (i%4==0){
check=true;
}
if (i%4!=0){
check=false;
}
//然后判断是不是世纪年
if (i%100==0){
if (i%400==0){
check=true;
}
else{
check=false;
}
}
//如果是闰年
if (check){
if (j==2){
day=29;
}
}
if (check==false){
if (j==2){
day=28;
}
}
if (j==1||j==3||j==5||j==7||j==8||j==10||j==12){
day=31;
}
if (j==4||j==6||j==9||j==11){
day=30;
}
for (int k=1;k<=day;k++){
week++;
if (k==13) date[week%7]++;
}
}
}
cout<<date[6]<<" "<<date[0]<<" "<<date[1]<<" "<<date[2]<<" "<<date[3]<<" "<<date[4]<<" "<<date[5]<<endl;
return 0;
}