AcWing 1341. 十三号星期五
原题链接
简单
作者:
吃手手丶
,
2021-01-20 09:17:39
,
所有人可见
,
阅读 294
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int res[7];
int flag=0;
int d[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int day,month,year;
//判断是否符合日期
bool isdate(int x){
day=x%100;
x/=100;
month=x%100;
x/=100;
year=x;
if(day<1||day>31||month<1||month>12) return false;
else{
if(month!=2){
if(d[month-1]<day) return false;
else return true;
}else{
if(year%400==0||(year%4==0&&year%100!=0)){
if(day<=29) return true;
else return false;
}else{
if(day<=28) return true;
else return false;
}
}
}
}
//判断是否是13号
void judge(){
int tmp=(flag+1)%7;
if(day==13) res[tmp]++;
flag++;
}
int main(){
int n;
cin>>n;
int end=18991231+10000*n;
for(int i=19000101;i<=end;i++){
if(isdate(i)){
judge();
}
}
cout<<res[6]<<' '<<res[0]<<' '<<res[1]<<' '<<res[2]<<' '<<res[3]<<' '<<res[4]<<' '<<res[5];
return 0;
}
java代码
import java.util.*;
public class Main {
static int week_day(int year,int month,int day){
if(month==1||month==2){
month+=12;
year--;
}
return (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + 1) % 7;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] res=new int[7];
for(int i=1900;i<1900+n;i++){
for(int j=1;j<=12;j++){
res[week_day(i,j,13)]++;
}
}
System.out.println(res[6]+" "+res[0]+" "+res[1]+" "+res[2]+" "+res[3]+" "+res[4]+" "+res[5]);
}
}