HDOJ 1201 18岁生日

题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1201


这题的关键就是看月份是否大于3.
分两种情况讨论:
若大于3,则判断是否是闰年按后一年看。
若小于等于3,则判断是否是闰年按本年看。

这里给大家一些测试数据:
测试数据:

1980-02-29
-1
1988-03-03
6574
1987-03-03
6575
1970-03-03
6575
1988-02-02
6575
1987-02-02
6575
1970-02-02
6574
1988-02-28
6575
1970-02-28
6574
1987-02-28
6575

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Author: Tanky Woo
// HDOJ 1201
// Accepted 1201 0MS 264K 741 B C++ Tanky Woo 
#include <iostream>
#include <cmath>
using namespace std;
int nCases;
 
bool Is_leap(int n)
{
	if((n%4==0 && n%100!=0) || n%400==0)
		return 1;
	else
		return 0;
}
 
int main()
{
	scanf("%d", &nCases);
	int year, month, day;
	while(nCases--)
	{
		char tmp;
		// 先开始我还傻傻的去用string表示...麻烦...
		cin >> year >> tmp >> month >> tmp >> day;
		if(month==2 && day==29)
		{
			cout << -1 << endl;
			continue;
		}
		int run=0;
		if(month>=3)
		{
			for(int i=1; i<=18; ++i)
				if(Is_leap(year+i))
					run++;
		}
		else
		{
			for(int i=0; i<18; ++i)
				if(Is_leap(year+i))
					run++;
		}
		cout << 365*18+run << endl;
	}
	return 0;
}

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

发表评论

电子邮件地址不会被公开。 必填项已用*标注