2145: 黑色星期五
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 68 Solved: 38
[Submit][Status][Web Board]Description
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。Input
输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
Output
输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
Sample Input
1998
Sample Output
3
求星期可用
基姆拉尔森计算公式:
W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400+1)%7
这里的d就用13,需要注意一月二月算前一年的13月14月
#include<bits/stdc++.h>
#define ll long long
#define pre(i,a,b) for(int i=a;i<=b;i++)
#define rep(i,a,b) for(int i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int main(){
int cnt=0;
int y,w;
cin>>y;
pre(i,1,12){
if(i==1)
w=(13+2*13+3*14/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400+1)%7;
else if(i==2)
w=(13+2*14+3*15/5+y-1+(y-1)/4-(y-1)/100+(y-1)/400+1)%7;
else
w=(13+2*i+3*(i+1)/5+y+y/4-y/100+y/400+1)%7;
if(w==5)
cnt++;
}
cout<<cnt<<endl;
return 0;
}