题目描述:

有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。  

输入: 

输入只有一行,即某个特定的年份(大于或等于1998年)。  

输出: 

输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。   

样例输入: 

1998 

样例输出: 

解题思路: 

根据题目,我们已知天数是13号,所以只需要确定年份和月份即可,运用基姆拉尔森公式(不需要判断是否为闰年)

x=(13+2*m+3*(m+1)/5+year+year/4-year/100+year/400)%7;

如果月份是1或者2,此时月份m需要加上12,按照上一年的13月和14月来算,同时年份-1,最后对7求余,题目说的是星期五,所以只需要让余数等于4就可以了,具体的来看代码吧!!! 

程序代码: 
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
/*int LeapYear(int year)
{
	if((year%4==0&&year%100!=0)||year%400==0)
		return 1;
	return 0;
}*/
int main()
{
	int n,sum=0,m,year,x;
	cin>>n;
	year=n;
	for(int i=1;i<=12;i++)
	{
		m=i;
		if(m==1||m==2)
		{
			m+=12;
			year--;
			x=(13+2*m+3*(m+1)/5+year+year/4-year/100+year/400)%7;
			if(x==4)
				sum++;
		}
		else
		{
			x=(13+2*m+3*(m+1)/5+year+year/4-year/100+year/400)%7;
			if(x==4)
				sum++;
		}
		year=n;
	}
	cout<<sum<<endl;
	return 0;
}