HDU 6112 今夕何夕 (这也要写??)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112
题目大意:给你一个合法的年月日,问下次同样是这个月日,星期一样的最早是哪年? 题目保证不超过四位数。
解题思路:讲道理真的需要吗? 过一年+365天,如果是闰年+366天,对7取余为0了就OK了。不过判断地方稍微有点麻烦,需要考虑今天是2 29,小于2 29和大于的情况,也不复杂(那我咋没写出来???)
代码:
1 int y, m, d; 2 3 bool isleap(int x){ 4 if((x % 4 == 0 && x % 100 != 0) || x % 400 == 0) return true; 5 return false; 6 } 7 8 int solve(){ 9 int cnt = 0; 10 if(m == 2 && d == 29){ 11 int la = y; 12 for(int i = y + 1; i <= 10000; i += 1){ 13 if(isleap(i - 1)) cnt += 366; 14 else cnt += 365; 15 if(isleap(i) && cnt % 7 == 0) return i; 16 } 17 } 18 else if(m <= 2){ 19 for(int i = y; i <= 10000; i++){ 20 if(isleap(i)) cnt += 366; 21 else cnt += 365; 22 if(cnt % 7 == 0) return i + 1; 23 } 24 } 25 else{ 26 for(int i = y + 1; i <= 10000; i++){ 27 if(isleap(i)) cnt += 366; 28 else cnt += 365; 29 if(cnt % 7 == 0) return i; 30 } 31 } 32 } 33 int main(){ 34 // freopen("in.txt", "r", stdin); 35 // freopen("out.txt", "w", stdout); 36 int T; 37 scanf("%d", &T); 38 while(T--){ 39 scanf("%d", &y); getchar(); 40 scanf("%d", &m); getchar(); 41 scanf("%d", &d); 42 int ans = solve(); 43 printf("%d\n", ans); 44 } 45 }
题目:
今夕何夕Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 942 Accepted Submission(s): 316 Problem Description
今天是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
Source
|