首页 > ACM题库 > HDU-杭电 > HDU 1201 18岁生日[解题报告] C++
2013
12-04

HDU 1201 18岁生日[解题报告] C++

18岁生日

问题描述 :

Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。

输入:

一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。

输出:

T行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。

样例输入:

1
1988-03-07

样例输出:

6574

 

//Problem:hdu1201
//Data:2011 11 1

#include <iostream>
using namespace std;

bool isleapYear(int year)
{
	if(year%4==0 && year%100!=0 || year%400==0)
		return true;
	else
		return false;
}

int main()
{
	//freopen("E:\\in.txt","r",stdin);
	int t;
	int year,month,day;	
	cin >> t;
	while(t--)
	{
		cin >> year;
		cin.get();		
		cin >> month;
		cin.get();
		cin >> day;
		int leapyear = 0;
		//先算出中间共有几个闰年 
		for(int i=year; i<=year+18; i++)
			if(isleapYear(i))
				leapyear++;
		//有两种情况,分开讨论
		//情况一:如果出生那年是闰年 
		if(isleapYear(year))
		{
			if(month == 2 && day == 29){
				cout << -1 << endl;
				continue;
			}
			if(month > 2)
				leapyear--;
		}
		
		//情况二:如果18岁那年是闰年 
		if(isleapYear(year+18))
		{
			if(month <= 2)
				leapyear--;			
		}
		cout << 6570 + leapyear;
		cout << endl;
	}
	return 0;
}


  1. 第23行:
    hash = -1是否应该改成hash[s ] = -1

    因为是要把从字符串s的start位到当前位在hash中重置

    修改提交后能accept,但是不修改居然也能accept