2017百度之星初赛:A-1005. 今夕何夕

今夕何夕

 
 Accepts: 1345
 
 Submissions: 5533
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 32768/32768 K (Java/Others)
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


一年一年的加,直到天数差是7的倍数

注意特殊情况:日期是2月29日的,特判就好了

两组很强的数据:

2016-2-29

2096-2-29

答案:
2044  2108
#include
int main(void)
{
	int T, y, m, d, now, sum;
	scanf("%d", &T);
	while(T--)
	{
		scanf("%d-%d-%d", &y, &m, &d);
		if(m==2 && d==29)
		{
			now = y;
			sum = 0;
			while(sum==0 || sum%7!=0)
			{
				now += 4;
				sum += 1461;
				if(now%100==0 && now%400!=0)
				{
					now += 4;
					sum += 1460;
				}
			}
			printf("%d\n", now);
		}
		else if(m<=2)
		{
			sum = 0;
			now = y;
			while(sum==0 || sum%7!=0)
			{
				if(now%4==0 && now%100!=0 || now%400==0)
					sum += 366;
				else
					sum += 365;
				now++;
			}
			printf("%d\n", now);
		}
		else
		{
			sum = 0;
			now = y;
			while(sum==0 || sum%7!=0)
			{
				now++;
				if(now%4==0 && now%100!=0 || now%400==0)
					sum += 366;
				else
					sum += 365;
			}
			printf("%d\n", now);
		}
	}
	return 0;
}

你可能感兴趣的:(各种水题)