算法训练 黑色星期五

来源:互联网 发布:手机日历天气软件 编辑:程序博客网 时间:2024/04/30 09:55

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

由题,推知1998年1月13日为星期二,由公式(day+2)%7可求出第n年1月13号为星期几,在此基础上每次加一个月,判断该月13号是否为星期五

#include <iostream>using namespace std;int main(){    int date[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//储存平年每个月的天数    int n,i,count=0;//记录黑色星期五的个数    int day=0;    int m=2;//以1998年1月13号为起点,即星期二    cin>>n;    for(i=1998;i<n;i++)    {       if((i%4==0&&i%100!=0)||(i%400==0&&i%100==0))       {           day+=366;       }        else           day+=365;    }    m=(day+m)%7;//得出第n年1月13号为星期几    if(m==5)        count++;    if(m==0)        m=7;    for(i=1;i<12;i++)//一月13号已经判断过,i<12    {        day=0;        if(i==2)        {            if((n%4==0&&n%100!=0)||(n%400==0&&n%100==0))                day+=date[i]+1;            else                day+=date[i];        }        else            day+=date[i];        m=(m+day)%7;        if(m==5)            count++;        if(m==7)            m=7;    }    cout<<count<<endl;    return 0;}
原创粉丝点击