题目描述
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月6日,所以超过200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入描述:
输入在第一行给出正整数N,取值在(0, 105];随后N行,每行给出1个人的姓名(由不超过5个英文字母组成的字符串)、以及
按“yyyy/mm/dd”(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出描述:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
输入例子:
5 John 2001/05/12 Tom 1814/09/06 Ann 2121/01/30 James 1814/09/05 Steve 1967/11/20
输出例子:
3 Tom John
已经确定输入合法了, 如果不合法判断就很麻烦了
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
int n ;
n = cin.nextInt();
String name ,s ,str;
int year, month ,day;
int maxyear = 0,maxmonth = 0,maxday = 0;
int minyear = 9999, minmonth = 9999,minday = 9999;
String maxname="0", minname="0" ;
int num = 0;
for(int i = 0;i<n;i++)
{
name = cin.next();
s = cin.next();
str = s.substring(0,4);
year = Integer.parseInt(str);
str = s.substring(5,7);
month = Integer.parseInt(str);
str = s.substring(8,s.length());
day = Integer.parseInt(str);
if((year<2014||(year==2014&&month<9)||(year==2014&&month<9&&day<=6)) &&
(year>1814||(year==1814&&month>9)||(year==1814&&month==9&&day>=6)))
{
num++;
if(year>maxyear||(year==maxyear&&month>maxmonth)||(year==maxyear&&month==maxmonth&&day>maxday))
{
maxyear = year;
maxmonth = month;
maxday = day;
maxname = name;
}
if(year<minyear||(year==minyear&&month<minmonth)||(year==minyear&&month==minmonth&&day<minday))
{
minyear = year;
minmonth = month;
minday = day;
minname = name;
}
}
}
System.out.print(num);
if(num!=0)
System.out.printf(" %s %s\n",minname,maxname);
cin.close();
}
}