0051:生日相同 java Map和List多个知识点

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
	}
	
	
}

猜你喜欢

转载自blog.csdn.net/sdz20172133/article/details/82346341