今夕何夕 HDU
阿新 • • 發佈:2018-12-20
今天是2017年8月6日,農曆閏六月十五。
小度獨自憑欄,望著一輪圓月,發出了“今夕何夕,見此良人”的寂寞感慨。
為了排遣鬱結,它決定思考一個數學問題:接下來最近的哪一年裡的同一個日子,和今天的星期數一樣?比如今天是8月6日,星期日。下一個也是星期日的8月6日發生在2023年。
小貼士:在公曆中,能被4整除但不能被100整除,或能被400整除的年份即為閏年。
Input
第一行為T,表示輸入資料組數。
每組資料包含一個日期,格式為YYYY-MM-DD。
1 ≤ T ≤ 10000
YYYY ≥ 2017
日期一定是個合法的日期
Output
對每組資料輸出答案年份,題目保證答案不會超過四位數。
Sample Input
3
2017-08-06
2017-08-07
2018-01-01
Sample Output
2023
2023
2024
題意:
給出一個年月日YY-MM-DD,它是星期X,要找下一個相同的一天(月,日相同,都是星期X)。
閏年366天,366/7=52,366%7=2。是52個周多2天
平年365天,365/7=52,365%7=1。是52個周多1天
給出了2017年8月6日,並且是星期日,那麼要找出下一個8月6日在也是星期日的那一年。
假設要找到的那一年是NEWY,給出的年份是YY。那YY和NEWY之間 每年多餘的天數加起來%7=0,那就找到了NEWY。
但是如果給出的那天是閏年的2月29的話,不但要滿足上面多餘天數的和%7=0,而且NEWY這一年還必須是閏年。
程式碼:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main() { int t; int y,m,d; scanf("%d",&t); while(t--) { scanf("%d-%d-%d",&y,&m,&d); int res=0; int i; if(m<2||m==2&&d<29) //2月29之前的日子,就要看這一年是不是閏年 { for(i=y+1;i<=9999;i++) { if(((i-1)%400==0)||((i-1)%100!=0&&(i-1)%4==0)) //閏年多兩天.非閏年多一天 res++; res++; if(res%7==0&&res>0)break; } printf("%d\n",i); } else if(m>2) //2月29之後可能的日子就看下一年是不是閏年來計算 { for(i=y+1;i<=9999;i++) { if((i%400==0)||(i%100!=0&&i%4==0)) //閏年多兩天 res++; res++; if(res%7==0&&res>0)break; } printf("%d\n",i); } else if(m==2&&d==29) { for(i=y+1;i<=9999;i++) { if((i%400==0)||(i%100!=0&&i%4==0)) //閏年多兩天 res++; res++; if(res%7==0&&res>0&&((i%400==0)||(i%100!=0&&i%4==0)))break; } printf("%d\n",i); } } return 0; }