版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sdz20172133/article/details/82346341
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
本题涉及知识点多,TreeMap<node,List<String>> map1=new TreeMap<node,List<String> >(); 对Treemap的排序,结构体,list转化为string,具体看代码把。
两个容易忽略的点:
1.生日如果只有一个人,怎不用输出
2.生日要从小到大排序
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.LinkedHashMap;
import java.util.Scanner;
public class Main {
static TreeMap<node,List<String>> map1=new TreeMap<node,List<String> >();
static void f(node key,String s){//将值加入map中,重复的在value后面添加
if(map1.containsKey(key)){
map1.get(key).add(s);
map1.put(key,map1.get(key));
}
else{
List<String> L = new ArrayList<String>();
L.add(s);
map1.put(key,L);
}
}
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
int n=cin.nextInt();
int ans=0;
for(int i=1;i<=n;i++){
int sum=0;
String s = cin.next();
node x = new node();
x.a = cin.nextInt();
x.b = cin.nextInt();
f(x,s);
}
//System.out.println(map1.size());
for (node key : map1.keySet()) {
if(map1.get(key).size()>1)
{
System.out.print( key.a+" "+key.b+" ");
//list 转化为String
String[] toBeStored = map1.get(key).toArray(new
String[map1.get(key).size()]);
for(String s : toBeStored) {
System.out.print(s+" ");
}
System.out.println();
}
}
}
}
class node implements Comparable<node>{//treemap的的排序
int a=0,b=0;
public int compareTo(node no)
{
if(this.a==no.a)
return this.b-no.b;
return this.a-no.a;
}
@Override
public String toString() {
return a+ " " + b;
}
}
老师的直接map中value为String的方法
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class Main{
public static void main(String[]args) {
Scanner sc=new Scanner(System.in);
Map<Md,String> m1=new TreeMap<Md,String>();
int n=sc.nextInt();
for(int i=1;i<=n;i++){
String sno=sc.next();
int m=sc.nextInt();
int d=sc.nextInt();
Md md1=new Md(m,d);
String v=m1.get(md1);
if(v==null)
v="";
m1.put(md1, v+" "+sno);
}
Set<Md> mds=m1.keySet();
for(Md md:mds){
String v=m1.get(md);
if(v.trim().indexOf(" ")!=-1)
System.out.println(md+v);
}
}
}
class Md implements Comparable<Md>{
int m,d;
public Md(int m, int d) {
super();
this.m = m;
this.d = d;
}
@Override
public int compareTo(Md md) {
if(this.m==md.m){
return this.d-md.d;
}
return this.m-md.m;
}
public String toString(){
return m+" "+d;
}
}