题目描述

  某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。

  这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。

输入格式:

  输入在第一行给出正整数 N,取值在(0,10的5次方];随后 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

代码

package com.hbut.pat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Pat_1028 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int m = Integer.parseInt(br.readLine());
		String name = ""; 
		int year = 0; 
		int month = 0; 
		int day = 0; 
		int valid = 0; 
		String maxname = ""; 
		String minname = ""; 
		int maxage = 0; 
		int minage = 200; 
		for (int i = 0; i < m; i++) {
			String[] str = br.readLine().split(" ");
			name = str[0];
			year = Integer.parseInt(str[1].substring(0, 4));
			month = Integer.parseInt(str[1].substring(5, 7));
			day = Integer.parseInt(str[1].substring(8));
			if (checkbirth(year, month, day) == true) {
				valid++;
				int temp = 2014 - year; 
				if (maxage < temp) {
					maxage = temp;
					maxname = name;
				}
				if (minage > temp) {
					minage = temp;
					minname = name;
				}
			}
		}
		if (valid != 0) {
			System.out.println(valid + " " + maxname + " " + minname);
		} else if (valid == 0) {
			System.out.println("0");
		}
	}

	public static boolean checkbirth(int y, int m, int d) { 
		if (y > 1815 && y < 2014)
			return true;
		if (y == 1814) {
			if (m > 9)
				return true;
			if (m == 9) {
				if (d >= 6)
					return true;
			}
			return false;
		}
		if (y == 2014) {
			if (m < 9)
				return true;
			if (m == 9) {
				if (d <= 6)
					return true;
			}
			return false;
		}
		return false;
	}
}


运行结果