黑色星期五

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑色星期五相关的知识,希望对你有一定的参考价值。

题目:黑色星期五
已知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;
}

技术分享

以上是关于黑色星期五的主要内容,如果未能解决你的问题,请参考以下文章

黑色星期五

基于Python的黑色星期五查找脚本

算法训练 黑色星期五

ACM_黑色星期五

黑色星期五

USACO黑色星期五