【2013 省賽試題】錯誤票據
阿新 • • 發佈:2021-02-19
文章目錄
錯誤票據
某涉密單位下發了某種票據,並要在年終全部收回。 • 每張票據有唯一的ID號。 • 全年所有票據的ID是連續的,但ID的開始數碼是隨機選定的。 因為工作人員疏忽,在錄入ID號的時候發生了一處錯誤,造成了某個ID斷號,另外一個ID重號。 你的任務: • 通過程式設計,找出斷號的ID和重號的ID 假設斷號不可能發生在最大和最小號。 要求程式: • 首先輸入一個整數(N<100)表示後面資料行數。 • 接著讀入N行資料 • 每行資料長度不等,是用空格分開的若干個(不大於100個)正整數(不大於10000) • 每個整數代表一個ID號。 • 程式輸出1行,含兩個整數mn,用空格分隔。其中,m表示斷號ID,n表示重號ID 例如 使用者輸入: 2 5 6 8 11 9 10 12 9 則程式輸出: 7 9 資源約定 峰值記憶體消耗(含虛擬機器<64M);CPU消耗<2000ms 請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入”的多餘內容
public class Test05_錯誤票據 {
public static void main(String[] args) {
// 建立集合儲存資料
ArrayList<Integer> list = new ArrayList<>();
// 控制檯錄入
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // N 表示資料的行數
// 遍歷N行資料
for (int i = 0; i < N; i++) {
String line = sc.nextLine();
String[] splits = line.split(" "); // 對每一行資料進行拆分
for (int j = 0; j < splits.length; j++) {
list.add(Integer.parseInt(splits[j])); // 將資料存入集合
}
}
System.out.println(list.size ()); // 輸出集合的大小
}
}
這裡會報錯:Exception in thread "main" java.lang.NumberFormatException: For input string: ""
,查了一下,說是在轉成int資料型別的時候,空值不能實現。
在這裡,個人理解是對於控制檯內容的判斷有誤。這裡的2
僅代表資料的行數N
,賦值後,對於遍歷來說就只有控制行數遍歷的作用。所以此時的控制檯遍歷內容實際上是後面兩行,首先在遍歷前就應該利用sc.nextLine()
下移一行,換句話說是吃掉2後面的換行符 \n
。
接下來就是對集合中的元素進行遍歷判斷 — 斷點、重複ID:
package 藍橋杯;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;
public class Test05_錯誤票據 {
public static void main(String[] args) {
// 建立集合儲存資料
ArrayList<Integer> list = new ArrayList<>();
// 控制檯錄入
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.nextLine(); // 更新控制檯內容 --- 吃掉整數後面的換行符
// 遍歷
for (int i = 0; i < N; i++) {
String line = sc.nextLine();
String[] splits = line.split(" ");
for (int j = 0; j < splits.length; j++) {
list.add(Integer.parseInt(splits[j]));
}
}
// 遍歷集合判斷斷點、重複ID
// 1.首先進行排序
Collections.sort(list); // 對於集合的排序用Collections.sort()
// 2.遍歷
int m = 0,n = 0; // 用於接收斷點、重複值
for (int i = 1; i < list.size(); i++) {
if (list.get(i) - list.get(i-1) == 2){
m = list.get(i)-1;
}
if (list.get(i)==list.get(i-1)){
n = list.get(i);
}
}
System.out.println(m+" "+n);
}
}
測試: