0
点赞
收藏
分享

微信扫一扫

ZOJ 3876 May Day Holiday (The 12th Zhejiang Provincial Collegiate Programming Contest)


题目链接】​​click here~~​​

题目大意】求一个年份的五月一号可以连续放几天假

解题思路】类似与求某年某月某日是星期几的问题,有好多解法,在这里笔者用了基姆拉尔森计算公式

解法如下:

基姆拉尔森计算公式
week=(data+ 2*month + 3*(month+1)/5+year+year/4 -year/100 + year/400) % 7;
在公式中data表示日期中的日数,month表示月份数,year表示年数。
注意:公式需要把一月和二月看成是上一年的十三月和十四月,
data是日期,所以计算结果就是实际的星期往前一位,即是:“0”为星期1,……,“6”为星期日。
例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

代码:

/*
Author:HRW
基姆拉尔森计算公式
*/
#include<bits/stdc++.h>
using namespace std;
int year,n,m,day;
int get(int year,int month,int data){
if(month==1||month==2){
year--;
month+=12;
}
int week=(data+ 2*month + 3*(month+1)/5+year+year/4 -year/100 + year/400) % 7;
return week;
}
int main()
{
int year,month,data;
int T;
scanf("%d",&T);
while(T--){
cin>>year;
int week=get(year,5,1);
week=(week%7+7)%7;
if(week==1||week==6)
printf("6\n");
else if(week==0)
printf("9\n");
else
printf("5\n");
}
return 0;
}









举报

相关推荐

12th day

0 条评论