# 天梯赛L1-005 考试座位号
题目根据试机座位号输出准考证号和考试座位号
输入格式
![输入图片说明](/imgs/2023-03-11/xIqs7xMLblnsapgI.jpeg)
![输入图片说明](/imgs/2023-03-11/uRadJnaRwxC62N7c.jpeg)
输出格式
![输入图片说明](/imgs/2023-03-11/4LtGnvatvkj0NsH5.jpeg)
## - 问题:部分答案运行超时
在做这个题目的时候很多种情况都会导致在中间两个答案是运行超时的,也就是超过了200ms,那么为什么会出现运行时间太长的问题?
## 1. 使用了scanner
scanner的效率远远小于io流的输入输出方式,这里也是要使用io流中高效的输入方式BufferedReader,这类的使用可以大大地节省程序读取字符的时间。
## 2. 所使用的算法思想
在读入字节的时候,使用储存的的方式,让试机座位号与字符串数组的下标相互对应,最后在查询的时候可以通过下标直接定位,而不用去使用for循环寻找目标的试机座位号。而且在读入的时候就应该对数据进行处理(详见下面代码)。
## 3. 字符串的处理方式
字符串通过split方法切割,得到一个字符串数组。在做字符串的连接时,通过“+”连接远远不如字符串本身所携带的函数concat来得高效。
## 其他问题
在Java中,使用scanner时,常常因为scanner.nextInt()和nextline()的混用从而导致在一行末尾的回车换行符没有被处理,如果要解决这个问题,可以使用两种解决办法:1.可以每次都是使用nextline()。2.可以每次在使用完nextInt()后再加上一个nextLine()将回车换行符读取。
详细代码
```
import java.io.*;
public class Main{
public static void main(String args[]) throws IOException{
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
int n,m;
n=Integer.valueOf(input.readLine());
String t;
String[] str=new String[n];
for(int i=0;i<n;i++) {
t=input.readLine();
String[] s=t.split(" ");
str[Integer.valueOf(s[1])-1]=s[0].concat(" ").concat(s[2]);
}
m=Integer.valueOf(input.readLine());
if(m==0)
System.out.print("");
else {
String[] x=input.readLine().split(" ");
int[] shiji=new int[m];
for(int i=0;i<m;i++) {
shiji[i]=Integer.valueOf(x[i]);
}
for(int i=0;i<m;i++) {
System.out.println(str[shiji[i]-1]);
}
}
}
}
```
写在最后,本人没有过多的写博客分享经验,请大家谅解。在专业上也没有那么高深,如有问题欢迎大家指出。