题目描述
蓝桥王国的每个快递都包含两个参数: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
题目分析:这个题目要求我们输入n个城市和单号,输出输入的城市单号为几个,并且把单号输出。这个就是有点类似于整理归纳类型的题目,就是输入一大堆数据,需要你去给他整理到一块并且输出整理后的结果。那么我们可以利用Java里面的容器来进行对数据归纳和整理.核心点就在于我们如何去判断这个城市是不是我们已经存在的而不是,我们还没有添加上去的。
步骤一:我们可以定义两个容器分别来存储city城市,和快递单号dig+城市,第一个容器用来判断这个城市是否已经存在过.
static Vector<String> city=new Vector<>();
static Vector <Vector<String>> dig=new Vector <Vector<String>>();
步骤二:这个步骤也是最核心的一个部分 ,我们需要往容器里面添加东西, 首先应该添加的是城市,因为没有城市我们就没有对应的快递单号,城市第一次出现之后,后面就不需要重复去添加,所以我们需要去写一个方法来判断我们这个城市是否已经被添加过了,如果没有被添加过,则在dig容器里面添加这个城市的位置,并且加入对应的快递单号,这也就是为什么dig需要讨一个verctor,因为单号套在城市里面,反之添加过了,则返回对应城市的下标,在下标里面我们直接找到dig城市,添加快递单号即可.
for (int i = 0; i < n; i++) {
String d= scanner.next();
String c= scanner.next();
int flag=isMyfriend(c);
if(flag==-1){
city.addElement(c);
dig.addElement(new Vector<>());
dig.get(city.size()-1).addElement(d);
}
else {
dig.get(flag).addElement(d);
}
}
static int isMyfriend(String c){
for (int i = 0; i < city.size(); i++) {
if (city.get(i).equals(c)){
return i;
}
}
return -1;
}
步骤三:我们最后把所有的城市和单号都添加上去了,我们只需要两个for循环来按照格式输出即可:
for (int i = 0; i < city.size(); i++) {
System.out.println(city.get(i)+" "+dig.get(i).size());
for (int j = 0; j < dig.get(i).size(); j++) {
System.out.println(dig.get(i).get(j));
}
}
完整代码如下:
static Vector<String> city=new Vector<>();
static Vector <Vector<String>> dig=new Vector <Vector<String>>();
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
for (int i = 0; i < n; i++) {
String d= scanner.next();
String c= scanner.next();
int flag=isMyfriend(c);
if(flag==-1){
city.addElement(c);
dig.addElement(new Vector<>());
dig.get(city.size()-1).addElement(d);
}
else {
dig.get(flag).addElement(d);
}
}
for (int i = 0; i < city.size(); i++) {
System.out.println(city.get(i)+" "+dig.get(i).size());
for (int j = 0; j < dig.get(i).size(); j++) {
System.out.println(dig.get(i).get(j));
}
}
}
static int isMyfriend(String c){
for (int i = 0; i < city.size(); i++) {
if (city.get(i).equals(c)){
return i;
}
}
return -1;
}