HDU-1201-18岁生日(Java AC利用Calendar类)

18岁生日

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 21864    Accepted Submission(s): 6933

Problem Description

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

Input

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

Output

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

Sample Input

1
1988-03-07

Sample Output

6574

Author

Gardon

Source

Gardon-DYGG Contest 2

Recommend

JGShining   |   We have carefully selected several similar problems for you:  1205 1106 1215 1228 1234

当红色的Accpted出现在我面前的时候,我几乎泪流满面,真的,即使今天是愚人节,但是这是我的实话.....即使它是一个大水果,妈蛋!我也足足a了1个小时,一个小时......各位a友,AC且不易,且行且珍惜啊。

按照一般c/c++的思路,这题因该就是用格式化输入scanf("%d-%d-%d",year,month,day),然后又是用闰年平年搞一搞,然后考虑没有18岁的生日这种情况,就是if(month==2&&day==29){ printf("-1");  continue }.我开头也是这样想的,但是决定认真学Java的我,想用Java来ac这道大水果,然后光是格式化输入年月日,就弄得不行,但是有一点被我发现,就是Java的封装Calendar类真是好用,我只需要直接调用就可以了,但是因为不熟悉用法,走了不少弯路,浪费了不少时间......不过总之我认为我的方法还算比较创新的,闰年平年什么的,我根本就不需要管!

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		Scanner input = new Scanner(System.in);
		int n = input.nextInt();                    					     //数T,T行每行有一个日期
		input.nextLine();
		for (int i = 0; i < n; i++)
		{
			String time = input.nextLine();        							 //读入日期保存在字符串time变量里
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

			if (n == 0)
				break;
			try
			{
				Date date1 = sdf.parse(time);								 //time转换为Date类型
				Date date2 = new Date();                                     //初始化date2用来保存18年后日期
				Calendar cal1 = Calendar.getInstance();                      //初始化cal1用来保存初始日期
				Calendar cal2 = Calendar.getInstance();                      //初始化cal2用来保存18年后日期
				cal1.setTime(date1);
				cal2.setTime(date1);
				cal2.add(Calendar.YEAR, 18);                                 //加上18年后的cal2
				date2 = cal2.getTime();
				long day1 = (long) date1.getTime() / (1000 * 60 * 60 * 24);  //算初始日期的总天数
				long day2 = (long) date2.getTime() / (1000 * 60 * 60 * 24);  //算18年后的总天数
				if (cal1.get(Calendar.MONTH) + 1 == 2                        //Calendar.MONTH 月份是从0开始的,所以要加1
						&& cal1.get(Calendar.DATE) == 29)					 //Calendar.DATE 即是日
				{
					System.out.println("-1");
				}
				else
				{
					System.out.println(day2 - day1);						//相减便是过去的天数!
				}
			}

			catch (ParseException e)
			{
				System.out.println("输入失败!");
				e.printStackTrace();
			}
		}
	}
}
时间: 2024-12-14 18:21:19

HDU-1201-18岁生日(Java AC利用Calendar类)的相关文章

hdu 1201 18岁生日 (简单题)

18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 18281    Accepted Submission(s): 5776 Problem Description Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他

hdu 1201 18岁生日

#include <stdio.h> int r(int y) { return (y%4==0&&y%100!=0)||(y%400==0); } int f(int y,int m,int d) { int i,cou=0; if((!r(y+18))&&m==2&&d==29)return -1; if(m>=3) { for(i=1; i<=18; i++) if(r(y+i)==1)cou++; } else { for(i

HDU ACM 1201 18岁生日

计算方法: <1>.将出生年经过的天数与18岁那年经过的天数加在一起算作一年. <2>.不算闰年,则18年共度过18*365天. <3>.考虑闰年,出生年与18岁生日合在一起那年单独考虑,其他年份只要是闰年,总天数加1天即可. <4>.单独考虑合在一起年份,若出生年是闰年,且在2月29日之前出生,那么他(她)必定经过2月29日这天,总天数加1:对于18岁那年,若是闰年,且在2月28日之后出生的,他(她)同样经过2月29这天,总天数加1. #include&l

(HDU)1201 -- 18岁生日

题目链接:http://vjudge.net/problem/HDU-1201 分析:这个题目要注意的是输出-1是指这个人的生日在某个闰年的2月29日,那他只能过4的倍数的生日. 还有一点要注意他的生日日期是在2月及以前还是3月及以后,这个和计算的起始年份有关. 如果他的生日在1.2月,那么就以当前年为起始年份,如果今年是闰年就要加一了: 如果他的生日在3月及以后,当前年是不是闰年没有影响,下一年作为起始年份考虑. 然后循环分析18年是不是闰年... 1 #include <cstdio> 2

HDOJ 1201 18岁生日

[思路]:无论如何都要经过18年,所以问题就是判断18年是否是闰年.注意:2月以后判断从下一年开始的18年,2月以前判断从今年开始的18年.另外还有一个2月29生日的特判.Ps.一年是365天,不是356天! [AC代码]: #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <io

hdu_1201 18岁生日

http://acm.hdu.edu.cn/showproblem.php?pid=1201 分析: 看到题目时,纠结了一会儿--出生那一年算不算一岁?  不算的.   1900.3-1901.3 才是一岁,是个时间间隔 (主要是因为这里是按生日来算年龄,而有些题是按年份来说而非生日,这两者还是有些区别) 1.   闰年判断 整除4不整除100    或者   整除400 之前觉得这两个条件搞不清楚,闰年不是每四年一个吗? 每4年有个闰年 -- 不严谨 应是四年一闰,百年不闰,四百年再闰 原因:

18岁生日

18岁生日 Problem Description Gardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下. Input 一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD.如我的生日是1988-03-07. Output T行,每行一个数,表示此人从出生到18岁生日所经过的天数.如果这个人没

1037:18岁生日(日期计算问题)

题目描述 小明的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下. 输入格式 输入的第一行是一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD.如我的生日是1988-03-07. 输出 T行,每行一个数,表示此人从出生到18岁生日所经过的天数.如果这个人没有18岁生日,就输出-1. 样例输入 1198

【Java】使用Calendar类来获取当前的日期

在<[Java]有关System.currentTimeMillis()的思考>(点击打开链接)中已经介绍过,如果利用System.currentTimeMillis()取出当前的时期.在Java中其实同样可以利用Calendar类来获取当前的日期.只是其取法比较繁琐,要分别取出当前的年.月.日.时.分.秒将其拼接起来. 如下的代码: import java.util.Calendar; import java.util.GregorianCalendar; public class cale