1. 程式人生 > >【Zeller公式計算星期幾】HDU 6112 今夕何夕

【Zeller公式計算星期幾】HDU 6112 今夕何夕

display spl code cst algo blank hid pid target

acm.hdu.edu.cn/showproblem.php?pid=6112

【思路】

公式計算即可,註意特判2月29號

Zeller公式裏,計算出的week不能直接模7,要保證week是正數

【AC】

技術分享
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 #include<cmath>
 7 
 8 using namespace std;
 9 
10 bool
leap(int y) 11 { 12 if(y%400==0) return true; 13 if(y%4==0&&y%100!=0) return true; 14 return false; 15 } 16 int Zeller(int y,int m,int d) 17 { 18 if(m==1||m==2) 19 { 20 y--; 21 m+=12; 22 } 23 int c=y/100; 24 y-=c*100; 25 int w=y+y/4+c/4-2
*c+26*(m+1)/10+d-1; 26 while(w<0) w+=7; 27 w%=7; 28 return w; 29 } 30 int main() 31 { 32 int T; 33 scanf("%d",&T); 34 while(T--) 35 { 36 int y,m,d; 37 scanf("%d-%d-%d",&y,&m,&d); 38 int week=Zeller(y,m,d); 39 while(1) 40 {
41 y++; 42 if(m==2&&d==29) 43 { 44 if(leap(y)&&Zeller(y,m,d)==week) 45 { 46 printf("%d\n",y); 47 break; 48 } 49 } 50 else 51 { 52 if(Zeller(y,m,d)==week) 53 { 54 printf("%d\n",y); 55 break; 56 } 57 } 58 } 59 } 60 return 0; 61 }
Zeller

【Zeller公式計算星期幾】HDU 6112 今夕何夕