Java习题练习:错误票据


这道题是2013年第四届蓝桥杯 Java A组省赛第七题错误票据

题目

Java习题练习:错误票据_开发语言


Java习题练习:错误票据_测试用例_02

测试用例

为了方便大家进行操作,特意给出测试用例,如下:

用户输入:
2
5 6 8 11 9
10 12 9

则程序输出:
7 9

再例如:
  用户输入:
6
  164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196
  172 189 127 107 112 192 103 131 133 169 158
  128 102 110 148 139 157 140 195 197
  185 152 135 106 123 173 122 136 174 191 145 116 151 143 175 120 161 134 162 190
  149 138 142 146 199 126 165 156 153 193 144 166 170 121 171 132 101 194 187 188
  113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119

则程序输出:
  105 120

题目分析

这道题在测试机器中,只有两个测试用例,就是上面两个,也就是说对一个都有50分.

从这道题来看是很简单的,可以说看完就知道怎么做了:
把用户输入的数据,进行排序,之后进行暴力。后前两个数相差2时,大数-1就是我们要求的断号id;前后两个数相等时,就是我们的重号id。

但是这道题,在输入上时需要注意很多细节的。

1.我们输入N之后,要用in.nextLine();来吸收回车键。2.用for循环遍历输入N行,在循环体中要用String line =in.nextLine();来存储每行。3.之后用String []split=line.split(" ");来对各行进行分割存储。4.定义list链表,把各行分割之后的字符,转换成数字,
for(int j=0;j<split.length;j++) {
list.add(Integer.parseInt(split[j]));
}

源代码

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {


public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
ArrayList<Integer> list=new ArrayList<Integer>();
int N=in.nextInt();
in.nextLine();
for(int i=0;i<N;i++) {
String line =in.nextLine();
String []split=line.split(" ");
for(int j=0;j<split.length;j++) {
list.add(Integer.parseInt(split[j]));
}
}

Collections.sort(list);
int a=0,b=0;
for(int i=1;i<list.size();i++) {
if(list.get(i)-list.get(i-1)==2)
a=list.get(i)-1;
if(list.get(i)-(list.get(i-1))==0)
b=list.get(i);
}

System.out.println(a+" "+b);
}


}

源代码解析

18行 list.add(Integer.parseInt(split[j]));
Integer.parseInt(String)的作用就是将String字符类型数据转换为Integer整型数据。


22行 Collections.sort(list);
这里list是集合,所以就用Collections.sort(list);
如果list是数组,那就用Arrays.sort(list);


23行 int a=0,b=0;
a是断号id,b是重号id


27号 if(list.get(i)-(list.get(i-1))==0)

即使编译能通过,这里也不能写成if(list.get(i)==(list.get(i-1)))

因为list.get()取出来是对象,对象不能写==
对象的正确写法如下:
if(list.get(i).equals(list.get(i-1)))