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

网友投稿 668 2022-11-12

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

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基姆拉尔森计算公式*/#includeusing 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;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ZOJ 3870 Team Formation (The 12th Zhejiang Provincial Collegiate Programming Contest 数位DP+二分)
下一篇:POJ-1700 &&NYOJ 47 过河问题【贪心】
相关文章

 发表评论

暂时没有评论,来抢沙发吧~