美文网首页
蓝桥-算法训练 黑色星期五(水题)(星期算法)

蓝桥-算法训练 黑色星期五(水题)(星期算法)

作者: myleosu | 来源:发表于2018-03-30 15:43 被阅读0次

    题目描述
    算法训练 黑色星期五
    时间限制:1.0s 内存限制:512.0MB

    问题描述
    有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。
    说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期四,用户输入的年份肯定大于或等于1998年。
    输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。
    输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。
    输入输出样例
    样例输入
    1998
    样例输出
    3
    思路:emmmm,其实也不算一道特别水的题目,我写了蛮久(因为没注意一个变量问题...)的。不过也值得记录一下因为week=(date+orginal_week-1)%7计算星期几很管用。
    说下我的思路吧:先算出要计算那一年的1月1号是星期几然后再遍历该年每个月13号看是否为星期五然后记录下来。
    附上AC代码

    #include <iostream>
    
    using namespace std;
    int day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int main()
    {
        int n,cnt = 0,flag,t = 0;
        cin>>n;
        for(int i = 1998;i<n;i++)
            if((i%4==0&&i%100!=0)||(i%400==0))
                cnt+=366;
            else
                cnt+=365;
        int start = (cnt+4)%7;//cnt=0所以减1加1抵消
        if((n%4==0&&n%100!=0)||(n%400==0))
            flag = 1;
        else
            flag = 0;
        cnt = 0;
        for(int i = 1;i<=12;i++){
            if(flag&&i==3)
                cnt++;
            if((cnt+13+start-1)%7==5)//***重点
                t++;
            cnt+=day[i];
        }
        cout<<t;
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:蓝桥-算法训练 黑色星期五(水题)(星期算法)

          本文链接:https://www.haomeiwen.com/subject/zcsicftx.html