蓝桥杯 错误票据

    科技2026-01-09  11

    题目链接:AcWing 1204. 错误票据

    某涉密单位下发了某种票据,并要在年终全部收回。

    每张票据有唯一的ID号。

    全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。

    因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。

    你的任务是通过编程,找出断号的ID和重号的ID。

    假设断号不可能发生在最大和最小号。

    输入格式 第一行包含整数 N,表示后面共有 N行数据。 接下来 N行,每行包含空格分开的若干个(不大于100个)正整数(不大于100000),每个整数代表一个ID号。

    输出格式 要求程序输出1行,含两个整数 m,n,用空格分隔。其中,m表示断号ID,n表示重号ID。

    数据范围 1≤N≤100

    输入样例: 2 5 6 8 11 9 10 12 9

    输出样例: 7 9

    程序说明:

    注意输入就好了。

    代码如下:

    //java代码 import java.util.*; import java.io.*; public class Main { static int N = 100010; static int cnt[] = new int[N]; static int Max = -0x3f3f3f3f, Min = 0x3f3f3f3f; static int res1, res2; public static void main(String[] args) throws IOException{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int line; line = Integer.parseInt(in.readLine()); while(line-- > 0) { String[] s = in.readLine().split(" "); for(int i = 0; i < s.length; i++) { int t = Integer.parseInt(s[i]); Max = Math.max(Max, t); Min = Math.min(Min, t); cnt[t]++; //记录每个数出现的次数 } } for(int i = Min; i <= Max; i++) { if(cnt[i] == 0) res1 = i; //没有出现过则为断号 if(cnt[i] == 2) res2 = i; //出现过两次则为重号 } System.out.println(res1 + " " + res2); } }
    Processed: 0.018, SQL: 9