问题描述
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
输入输出样例
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
输入输出样例
样例输入
1998
样例输出
3
思路:
从1998年往输入的年份推,计算输入年份当年的13号又是星期5的情况
代码
#include<iostream>
#include<algorithm>
using namespace std;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void rn(int i)
{
if (i%4==0&&i%100!=0||i%400==0)
a[1] = 29;
else
a[1] = 28;
}
int main()
{
int n,i,j,k,s=4,d=1,m=4,cnt=0;
cin>>n;
for (i=1998; i<=n; i++)
{
rn(i); //判断是不是闰年
k=0;
while (1)
{
d++; //日自增
m=(m+1)%7; //0为星期7
if (d==13 && m==5 && i==n)//13号为星期五,且正好是输入的n年里
{
cnt++;
}
if (d==a[k])//到了月份末尾
{
d=0;
k++;
if (k>=12)//到了年末尾
{
break;
}
}
}
}
cout<<cnt;
return 0;
}