JavaStudy——0051:生日相同
阿新 • • 發佈:2018-12-20
總時間限制: 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]);
}
}