Data8.1错误票据

问题描述

某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的 ID 号。全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。
因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个
ID 重号。
你的任务是通过编程,找出断号的 ID 和重号的 ID。
假设断号不可能发生在最大和最小号。

输入格式

  • 要求程序首先输入一个整数 N(N<100)表示后面数据行数。
  • 接着读入 N 行数据。
  • 每行数据长度不等,是用空格分开的若干个(不大于 100 个)正整数(不大于 100000),请
    注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。
    每个整数代表一个 ID 号。

输出格式

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

样例输入 1

2
5 6 8 11 9
10 12 9

样例输出 1

7 9

样例输入 2

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

样例输出 2

105 12

思路

  • 本题较难的点在于,数据数组的输入,数据会有N行,我们需要判断输入的行数是否等会N;
  • Java中Scanner类中的方法next()和nextLine()都是吸取输入台输入的字符,两者的区别如下:
    • next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;
    • nextLine()吸取字符前后的空格/Tab键,回车键截止。
      Scanner类相关知识点链接:https://blog.csdn.net/weixin_43866499/article/details/105921388
  • 使用行数和nextLine可以有效的知道输入的有效数据;
  • 将输入的数据进行升序排列,当遇到数组前一个值和后一个值相等时,则可以得出重号。当数组下标s[i] == s[i - 1] + 2时,则可以知道断号的ID值为s[i - 1] + 1;

代码

package data;
import java.util.Arrays;
import java.util.Scanner;
public class Data81 {
    public static void main(String[] args)
    {
        Scanner cin = new Scanner(System.in);
        int N = cin.nextInt();
        int sum[] = new int[100000];
        int k = 0;
        cin.nextLine();
        for(int i = 0;i<N;i++)
        {
            Scanner c = new Scanner(cin.nextLine());
            while(c.hasNext())
            {
                sum[++k] = c.nextInt();
            }
        }
        int m = 0;//断号
        int n = 0;//重号
        Arrays.sort(sum,0,k+1);//排序
        for(int i = 1;i<=k;i++)
        {
            if(sum[i] == sum[i-1])
            {
                n = sum[i];
            }
            if(sum[i] == sum[i-1]+2)
            {
                m = sum[i-1]+1;
            }
        }
        System.out.println(m+" "+n);
    }
}

Data8.1错误票据

上一篇:SolidWorks2021安装方法(附详细安装教程)


下一篇:postman批量运行