美文网首页
ZCMU 2162:wjw的星期五

ZCMU 2162:wjw的星期五

作者: littlefox_ca93 | 来源:发表于2018-07-23 18:55 被阅读0次

    Time Limit: 1 Sec Memory Limit: 128 MB
    Submit: 39 Solved: 17

    Description

    wjw最近运气极其差,什么roll点1-100连着十次都是个位数啊,买个珍珠奶茶没有珍珠啊,吃方便面没有调料包啊...
    迷信的wjw觉得,一定是因为这个月的13号正好是星期五,才会导致他的运气这么差。
    现在他想知道,在某个年份中,有多少个月的13号是星期五,这样他才可以提前做好心理准备。
    PS.已知1998年1月1日是星期四,输入的年份肯定大于或等于1998年。

    Input

    input
    输入只有一行,表示年份(大于等于1998年)

    Output

    output
    输出只有一行,表示这一年中有多少个月的13号是星期五

    Sample Input

    1998

    Sample Output

    3

    HINT

    说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整除的年份,或是既能被100整除也能被400整除的年份;

    题解:

    前几天做题有了解到这个公式:基姆拉尔森计算公式(根据日期判断星期几);

    W= (d+2m+3(m+1)/5+y+y/4-y/100+y/400) mod 7

    代码:

    #include<stdio.h>
    int year[2][13]=
    {
        {0,30,28,31,30,31,30,31,31,30,31,30,31},
        {0,30,29,31,30,31,30,31,31,30,31,30,31}
    };
     
    int dayofweek(int y,int m,int d)
    {
        static int t[]= {0,3,2,5,0,3,5,1,4,6,2,4};
        y-=m<3;
        return (y+y/4-y/100+y/400+t[m-1]+d)%7;
    }
     
    int main()
    {
        int y;
        while(~scanf("%d",&y))
        {
            int k;
            k=(y%400==0||(y%4==0&y%100!=0));
            int cnt=0;
            int m[13]={1,2,3,4,5,6,7,8,9,10,11,12};
    
            for(int i=0; i<12; i++)
            {
                if(dayofweek(y,m[i],13)==5)
                    {
                        cnt++;
                    }
            }
     
            printf("%d\n",cnt);
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:ZCMU 2162:wjw的星期五

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