思路及代码
//input year >=1998
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int year;
cin >> year;
//total day
int total_day = 0;
//day=365*yeargap(366)
for (int y = 1998; y <= year-1; y++){
if ( ( (y%4==0) && (y%100!=0) ) || (y%400==0) ){
total_day += 366;
}else{
total_day += 365;
}
}
int sum = 0;
//year isleap
if ( ( (year%4==0) && (year%100!=0) ) || (year%400==0) ){
//13号的 day
int list13[] = {13, 44, 73, 104, 134, 165, 195, 226, 257, 287, 318, 348};
//星期五的 day 按当年算
for (int i = total_day+1; i <= total_day+366; i++){
if ( i%7 == 2){//找重复
if (find(list13, list13+12, i-total_day) != list13+12){
sum++;
}
}
}
}else{//year is not leap
//13号的 day
int list13[] = {13, 44, 72, 103, 133, 164, 194, 225, 256, 286, 317, 347};
//星期五的 day 按当年算
for (int i = total_day+1; i <= total_day+365; i++){
if ( i%7 == 2){//找重复
if (find(list13, list13+12, i-total_day) != list13+12){
sum++;
}
}
}
}
cout << sum <<endl;
return 0;
}
参考:1️⃣c++查找数组或者容器元素是否存在(std::find)_c++ 判断元素是否在数组中-CSDN博客
收获:1️⃣复习数组 find函数
菜菜,不是教程,做题和学习记录