``蓝桥杯第一届题目 黑色星期五
/**
问题描述
有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
输入输出样例
样例输入
1998
样例输出
3
**/
#include<iostream>
#include<algorithm>
using namespace std;
int day1[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int day2[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int is_year(int n)
{
//判断是否是闰年 函数
if((n%4==0&&n%100!=0)||n%400==0)
return 1;
return 0;
}
int main()
{
int year;
int begin_year = 1998;//初始年份
int begin_weekday = 4;//初始星期4
int day;
cin >> year; //输入年份
while (year>begin_year)
{
if(is_year(begin_year)==1)
{
begin_weekday = begin_weekday + 2;
if(begin_weekday>7)
begin_weekday = begin_weekday%7;
}
else
{
begin_weekday = begin_weekday + 1;
if(begin_weekday>7)
begin_weekday = begin_weekday%7;
}
begin_year++;
}
//cout<<"星期:"<<begin_weekday<<endl; //得到某年初始星期几
int num = 0; //统计次数
day = 13; //初始是13天
//判断是否是闰年
if(is_year(year)==1) //是闰年
{
for(int i=1;i<=11;i++)
{
if((day-1+begin_weekday)%7==5)
{
// cout<<year<<"-"<<i<<"-"<<"13"<<endl;
num++;
}
day = day + day1[i];
}
}
else //不是闰年
{
for(int i=1;i<=12;i++)
{
if((day-1+begin_weekday)%7==5)
{
num++;
// cout<<year<<"-"<<i<<"-"<<"13"<<endl;
}
day = day + day2[i];
}
}
// cout<<"次数:"<<num<<endl;
cout<<num<<endl;
return 0;
}