您的位置:首页 > 其它

黑色星期五

2013-11-22 13:38 197 查看
题目:黑色星期五

已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个"黑色星期五"。

"黑色星期五"指既是13日又是星期五的日期。

程序中函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为true(或false)分别表示year是(或不是)闰年。

分析思路

根据1900年1月1号是星期1,推算出year年1月13号是星期几,如果是星期五,则是一个黑色星期五,

然后推算year年每月的13号(2月到12月)是否是星期五,如果是则是黑色星期五。

 

/*
题目:黑色星期五
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个"黑色星期五"。
"黑色星期五"指既是13日又是星期五的日期。
程序中函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为true(或false)分别表示year是(或不是)闰年。
分析思路
根据1900年1月1号是星期1,推算出year年1月13号是星期几,如果是星期五,则是一个黑色星期五,
然后推算year年每月的13号(2月到12月)是否是星期五,如果是则是黑色星期五。
*/
#include <iostream>
using namespace std;
int count_5_13(int year) ;  //获取year这一年中有几个黑色星期五
bool isLeapYear(int year);  //判断闰年的函数,是闰年返回真,非闰年返回假

int  main()
{ int year;
cout<<"请输入您要判断的年(1900以后的年,包括1900年)";
cin>>year;
cout<<"黑色星期五的个数:"<<count_5_13(year)<<endl;  //输出year这一年中有几个黑色星期五
return 0;
}

int count_5_13(int year)  //函数定义
{
int date;        // date为0表示星期日,为1~6分别表示星期一至星期六
long days = 0;   // days记录天数
int m, y, c = 0;   // c用于表示黑色星期五的个数
if (year < 1900)
return -1;
//计算从1900年1月1日起,至给定年份year的1月13日间隔的天数
days = 12;
for (y = 1900; y < year; y++)
{
days += 365;
if (isLeapYear(y))   days++ ;
}
//此时的days是year这一年中1月13号到1900年1月1日之间的天数
date = ((days % 7) + 1) % 7;       // 算出给定年份year的1月13日是星期几
c = (date==5) ? 1 : 0;    //如果此year的1月13号正好是星期5,则是一个黑色星期五
if(date==5)
{
c=1;
cout<<year<<"-"<<1<<"-"<<13<<" 是星期五"<<endl;
}
else
c=0;
for(m = 2; m<=12; m++)  //再从2月到12月依次判断每月的13号是否是星期五
{
switch (m-1)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days = 31;  break;
case 4:
case 6:
case 9:
case 11: days = 30;  break;
case 2: days = 28;
if (isLeapYear(y))  days = 29;
break;
}
date =((days % 7) + date) % 7;
if (date==5)
{ c++;
cout<<year<<"-"<<m<<"-"<<13<<" 是星期五"<<endl;
}
}
return c;
}

bool isLeapYear(int year)   //判断闰年的函数定义
{
if((year%4==0&&year%100!=0)||year%400==0)
return true;
else
return false;
}


 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: