1. 程式人生 > >JavaStudy——0051:生日相同

JavaStudy——0051:生日相同

總時間限制: 1000ms 記憶體限制: 65536kB

描述 在一個有180人的大班級中,存在兩個人生日相同的概率非常大,現給出每個學生的學號,出生月日。試找出所有生日相同的學生。

輸入 第一行為整數n,表示有n個學生,n<100。 此後每行包含一個字串和兩個整數,分別表示學生的學號(字串長度小於10)和出生月(1<=m<=12)日(1<=d<=31)。 學號、月、日之間用一個空格分隔。 輸出 對每組生日相同的學生,輸出一行, 其中前兩個數字表示月和日,後面跟著所有在當天出生的學生的學號,數字、學號之間都用一個空格分隔。 對所有的輸出,要求按日期從前到後的順序輸出。 對生日相同的學號,按輸入的順序輸出。

樣例輸入

5
00508192 3 2
00508153 4 5
00508172 3 2
00508023 4 5
00509122 4 5

樣例輸出

3 2 00508192 00508172
4 5 00508153 00508023 00509122

Accepted程式碼

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        TreeMap<String,String>
tm=new TreeMap<String,String>(); for(int i=0;i<n;i++) { String id=in.next(); int m=in.nextInt(),d=in.nextInt(); String key=f(m,d); String value=tm.get(key); if(value==null) tm.put(key,id); else tm.
put(key,value+" "+id); } Set<String> s=tm.keySet(); for(String t:s){ String v=tm.get(t); if(v.indexOf(" ")!=-1) System.out.println(g(t)+" "+v); } in.close(); } static String f(int month,int day) { String m=month+""; String d=day+""; if(month<10) m="0"+m; if(day<10) d="0"+d; return m+" "+d; } static String g(String md) { String[] t=md.split(" "); return Integer.parseInt(t[0])+" "+Integer.parseInt(t[1]); } }