PAT——1028. 人口普查

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

这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过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

 1 package com.hone.basical;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.util.Scanner;
 5 
 6 /**
 7  * 原题目:https://www.patest.cn/contests/pat-b-practise/1025
 8  * @author Xia
 9  * 就是简单的处理字符串(将字符串处理为整型)
10  * 思路:先获取空格地方的下标,再将字符串中的年月日部分按照subString(int Start,int End)的方式解析出来
11  * 有一个测试点运行超时
12  */
13 public class basicalLevel1028Consus{
14     public static void main(String[] args) {
15         Scanner s = new Scanner(new BufferedInputStream(System.in));
16         int n = s.nextInt();
17         s.nextLine();
18         int valid = 0;
19         int min = 20140906;            //定义最小年龄、最大年龄的出生年月
20         int max = 0;
21         String maxName = "";
22         String minName = "";
23         
24         for (int i = 0; i < n; i++) {
25             String str = s.nextLine();
26             int count = 0;            //count表示年月开始的下标
27             for (int j = 0; j < str.length(); j++) {
28                 if (str.charAt(j) == ' ') {
29                     count = j;
30                     break;
31                 }
32             }
33             //将字符串类型的年龄转化为int
34             int data = Integer.parseInt(str.substring(count+1, count+5)+str.substring(count+6, count+8)+
35                     str.substring(count+9, count+11));
36             if (data>=18140906&&data<=20140906) {
37                 valid++;
38                 if (data > max) {
39                     max = data;
40                     minName = str.substring(0, count);
41                 }
42                 if (data<min) {
43                     min = data;
44                     maxName = str.substring(0, count);
45                 }
46             }
47         }
48         if (valid == 0) {
49             System.out.println(0);
50         }else {
51             System.out.println(valid+" "+maxName+" "+minName);
52         }
53     }
54 } 


原文地址:https://www.cnblogs.com/xiaxj/p/7985871.html