Problem Description今天是2017年8月6日,农历闰六月十五。 Input第一行为T,表示输入数据组数。 Output对每组数据输出答案年份,题目保证答案不会超过四位数。 Sample Input3 2017-08-06 2017-08-07 2018-01-01 Sample Output2023 2023 2024 |
分三种情况考虑,第一种月份小于等于2并且天数小于29,第二种月份大于2,第三种日期为2月29的。
#include <iostream>
#include <cstdio>
using namespace std ;
int year, month, day, n;
bool judge_year(int y) {
if(y%400==0 || (y%4==0&&y%100!=0)) {
return true;
}
return false;
}
int main() {
scanf("%d", &n);
char a, b;
while(n--) {
scanf("%d%c%d%c%d", &year, &a, &month, &b, &day);
int ans = 0;
if(month < 2||(month == 2 && day < 29)) {
for(int i = year+1; i <= 9999; i++) {
if(judge_year(i - 1))
ans++;
ans++;
if(ans%7==0 && ans>0) {
printf("%d\n",i );
break;
}
}
}
if(month > 2) {
for(int i = year+1; i <= 9999; i++) {
if(judge_year(i))
ans++;
ans++;
if(ans%7==0 && ans>0) {
printf("%d\n",i);
break;
}
}
}
if(month==2 && day==29) {
for(int i = year+1; i <= 9999; i++) {
if(judge_year(i))
ans++;
ans++;
if(ans%7==0 && ans>0 && judge_year(i)) {
printf("%d\n",i);
break;
}
}
}
}
return 0;
}