【2022刷题】快递分拣

题目描述
蓝桥王国的每个快递都包含两个参数:1.快递单号 2.快递城市。小李是蓝桥王国的一名快递员,每天的快递分拣让他苦不堪言。于是他想要你帮他设计一个程序用于快递的分拣(将不同快递按城市信息分开)。

输入描述
输入第一行包含一个整数 N,表示快递的个数。
接下来第 2 ∼N+1 行每行包含一个字符串 S 和一个字符串 P,分别快递单号以及快递对应的城市。
1<=N <=10^3 ,保证数据量不超过 10^6 。

输出描述
输出共若干行。按城市的输入顺序依次输出城市的名称以及城市的快递个数,以及该城市的所有快递单号(单号按照输入顺序排序)。

输入输出样例
示例
输入
10
10124214 北京
12421565 上海
sdafasdg213 天津
fasdfga124 北京
145252 上海
235wtdfsg 济南
3242356fgdfsg 成都
23423 武汉
23423565f 沈阳
1245dfwfs 成都
输出
北京 2
10124214
fasdfga124
上海 2
12421565
145252
天津 1
sdafasdg213
济南 1
235wtdfsg
成都 2
3242356fgdfsg
1245dfwfs
武汉 1
23423
沈阳 1
23423565f

运行限制
最大运行时间:1s 最大运行内存: 256M

解题思路
利用一个Vector<String> city容器存出现的城市名称
再以这个容器的下标建立个更大的Vector<Vector<String>> pack容器存对应下标的城市的快递单号

  • 查询城市是否遇到过
	static int findCity(String c){
		//int index = 0;
		for(int i = 0;i < city.size();i++){
			if(city.get(i).equals(c)){
				return i;
			}
		}
		return -1;
	}
  • 容器的建立和存储过程
	static Vector city = new Vector<String>();
	static Vector<Vector<String>> pack = new Vector<Vector<String>>();
	
	Scanner scan = new Scanner(System.in);
       
	int n = scan.nextInt();
	scan.nextLine();
	for(int i = 0; i < n;i++){
		String p = scan.next();
		String c = scan.next();
		scan.nextLine();
		int index = findCity(c);
		if(index!=-1){//以及存该城市
			pack.get(index).add(p);
		}else{//第一次遇到该城市
			city.add(c);
			
			pack.add(new Vector<String>());
			pack.get(city.size()-1).add(p);
		}
		
	}
  • 总的代码
import java.util.Scanner;
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
	static Vector city = new Vector<String>();
	static Vector<Vector<String>> pack = new Vector<Vector<String>>();
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
		int n = scan.nextInt();
		scan.nextLine();
		for(int i = 0; i < n;i++){
			String p = scan.next();
			String c = scan.next();
			scan.nextLine();
			int index = findCity(c);
			if(index!=-1){
				pack.get(index).add(p);
			}else{
				city.add(c);

				pack.add(new Vector<String>());
				pack.get(city.size()-1).add(p);
			}

		}
		for(int i = 0;i < city.size();i++){
			System.out.println(city.get(i)+" "+pack.get(i).size());
			for(int j = 0; j < pack.get(i).size();j++){
				System.out.println(pack.get(i).get(j));
			}
		}
        scan.close();
    }
	
	static int findCity(String c){
		//int index = 0;
		for(int i = 0;i < city.size();i++){
			if(city.get(i).equals(c)){
				return i;
			}
		}
		return -1;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬泉旅人Winspr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值