zcmu-2162 wjw的星期五

//2162 wjw的星期五

【题述】

题意:

    输入年份x,求该年中13号是星期五的月份有几个;

思路:

  1. 求x年~1998年之间有n个闰年

  2. 求x年~1998年之间有几天sum=( x-1998+1)+n

  3. //(不用做这一步了)求x年1月1日是周几 sum%7=w{0~6分别代表0-周三、1-周四,2-周五,3-周六,4-周日,5-周一,6-周二}

  4. 1~2月判断13号是否星期五:( sum+13)%7是否=2,( sum+13+m[0])%7是否=2

  5. 判断x年是否是闰年 是:3月:( sum+13+m[0]+m[1]+1)%7是否=2.  否:3月:( sum+13+m[0]+m[1])%7是否=2.

【我的代码(通过代码)】

#include <iostream>

#include <cstdio>

using namespace std;

int main()

{

    int x,i,j,n,sum2,count;

    long long sum;

    int m[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

    while(scanf("%d",&x)!=EOF){

        if((x%4==0&&x%100!=0)||(x%100==0&&x%400))

            m[2]=29;

        n=0;

        for(i=1998;i<x;i++){

            if((i%4==0&&i%100!=0)||(i%100==0&&i%400==0))

                n++;

        }

        //printf("%d\n",n);

        sum=(x-1998)*365+n;

        //printf("%lld\n",sum);

        sum2=count=0;

        for(j=1;j<=12;j++){

            sum2=sum2+m[j-1];

            if((sum+13+sum2)%7==2)

                count++;

        }

        printf("%d\n",count);

    }

    return 0;

}

【便于搜索】

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

猜你喜欢

转载自blog.csdn.net/hzyhfxt/article/details/81170467