题目描述
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
输入
输入只有一行,即某个特定的年份(大于或等于1998年)。
输出
输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
样例输入
1998
样例输出
3
#include<bits/stdc++.h>
using namespace std;
int M[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int y = 1998, m = 1, d = 1, w = 4, ans = 0;
int n;
cin>>n;
while(y!=n || m!=1 || d!=1){ //先算出这个年份1月1号星期几
if(y%400==0 || (y%4==0&&y%100!=0)){
M[2] = 29;
}
else{
M[2] = 28; //这个必须加,因为M为全局变量
}
d++;
w = (w + 1) % 7;//w为0为星期天
if(d > M[m]){
d = 1;
m ++;
}
if(m>12){
m = 1;
y ++;
}
}
while(y!=n+1 || m!=1 || d!=1){ //到明年
if(y%400==0 || (y%4==0&&y%100!=0)){
M[2] = 29;
}
else{
M[2] = 28; //这个必须加,因为M为全局变量
}
d++;
w = (w + 1) % 7;//w为0为星期天
if(d > M[m]){
d = 1;
m ++;
}
if(m>12){
m = 1;
y ++;
}
if(w==5&&d==13){ //13号又是星期五
ans++;
}
}
cout << ans << endl;
return 0;
}