1. 程式人生 > 其它 >【2013 省賽試題】錯誤票據

【2013 省賽試題】錯誤票據

技術標籤:# 藍橋杯java藍橋杯


文章目錄


錯誤票據

   某涉密單位下發了某種票據,並要在年終全部收回。
    • 每張票據有唯一的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);
    }

}

在這裡插入圖片描述
測試:

在這裡插入圖片描述

返回頂部