天梯赛L1-005 考试座位号 java

# 天梯赛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]);

}

}

}

}

```

写在最后,本人没有过多的写博客分享经验,请大家谅解。在专业上也没有那么高深,如有问题欢迎大家指出。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值