//2162 wjw的星期五
【题述】
题意:
输入年份x,求该年中13号是星期五的月份有几个;
思路:
-
求x年~1998年之间有n个闰年
-
求x年~1998年之间有几天sum=( x-1998+1)+n
-
//(不用做这一步了)求x年1月1日是周几 sum%7=w{0~6分别代表0-周三、1-周四,2-周五,3-周六,4-周日,5-周一,6-周二}
-
1~2月判断13号是否星期五:( sum+13)%7是否=2,( sum+13+m[0])%7是否=2
-
判断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年。