时间复杂度O(n)
C++写法一
#include<iostream>
using namespace std;
int res[7];
int main()
{
int n,day=-1;
int leap_year[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int common_year[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&n);
for(int i=1900;i<=1900+n-1;i++)
{
bool is_leap_year=(i%4==0 && i%100) || i%400==0;
for(int j=1;j<=12;j++)
{
if(is_leap_year)
{
for(int k=1;k<=leap_year[j-1];k++)
{
day=(day+1)%7;
if(k==13) res[day]++;
}
}
else
{
for(int k=1;k<=common_year[j-1];k++)
{
day=(day+1)%7;
if(k==13) res[day]++;
}
}
}
}
printf("%d %d ",res[5],res[6]);
for(int i=0;i<=4;i++) printf("%d ",res[i]);
}
C++写法2 (修改了输出)
#include<iostream>
using namespace std;
int res[7];
int main()
{
int n,day=-1;
int leap_year[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int common_year[12]={31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&n);
for(int i=1900;i<=1900+n-1;i++)
{
bool is_leap_year=(i%4==0 && i%100) || i%400==0;
for(int j=1;j<=12;j++)
{
if(is_leap_year)
{
for(int k=1;k<=leap_year[j-1];k++)
{
day=(day+1)%7;
if(k==13) res[day]++;
}
}
else
{
for(int k=1;k<=common_year[j-1];k++)
{
day=(day+1)%7;
if(k==13) res[day]++;
}
}
}
}
for(int i=0;i<7;i++) printf("%d ",res[(i+5)%7]);
}
Java
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
int[] res= new int[7];
int n,day=-1;
int[] leap_year={31,29,31,30,31,30,31,31,30,31,30,31};
int[] common_year={31,28,31,30,31,30,31,31,30,31,30,31};
Scanner input=new Scanner(System.in);
n=input.nextInt();
for(int i=1900;i<=1900+n-1;i++)
{
boolean is_leap_year= (i%4==0 && i%100!=0) || i%400==0;
for(int j=1;j<=12;j++)
{
if(is_leap_year)
{
for(int k=1;k<=leap_year[j-1];k++)
{
day=(day+1)%7;
if(k==13) res[day]++;
}
}
else
{
for(int k=1;k<=common_year[j-1];k++)
{
day=(day+1)%7;
if(k==13) res[day]++;
}
}
}
}
for(int i=0;i<7;i++) System.out.printf("%d ",res[(i+5)%7]);
}
}
Python3
if __name__ == "__main__":
res= [0,0,0,0,0,0,0]
day=-1
leap_year=[31,29,31,30,31,30,31,31,30,31,30,31]
common_year=[31,28,31,30,31,30,31,31,30,31,30,31]
n=int(input().split()[0])
for i in range(1900,1900+n):
is_leap_year= (i%4==0 and i%100!=0) or i%400==0
for j in range(1,13):
if is_leap_year:
for k in range(1,leap_year[j-1]+1):
day=(day+1)%7
if k==13:
res[day]+=1
else:
for k in range(1,common_year[j-1]+1):
day=(day+1)%7
if k==13:
res[day]+=1
for i in range(7):
print(f"""{res[(i+5)%7]} """,end="")