题目描述
某涉密单位下发了某种票据,并要在年终全部收口每张票据有唯一的 ID号。全年所有票据的 ID号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个ID 断号,另外一个 ID重号。你的任务是通过编程,找出断号的 ID 和重号的ID。假设断号不可能发生在最大和最小号。
输入要求
要求程序首先输入一个整数 N(N < 100)表示后面数据行数。接着读入 N 行数据。
每行数据长度不等,是用空格分开的若干个(不大于 100 个)正整数大于105)
输出要求
要求程序输出1行,含两个整数 m,n,用空格分隔。
其中,m 表示断号 IDn 表示重号 ID。
示例
输入
2
5 6 8 11 9
10 12 9
输出
7 9
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
//因为不定长,所以不能把所有的都存到数组中
//就可以把对应的数加到对应索引中的数组中
int num;
int max = 0;
int min = 100000;
long int a[100000] = {0};
char c;
scanf("%d",&num);
long int m,x,y;
for(int i = 0;i < num;i++){ //来判断何时结束再读入数据,就是读完相应的行数之后
while(1){ //行数没到就一直读
scanf("%ld",&m);
if(m > max){ //找到其中最大值最小值
max = m;
}
if(m <min){
min = m;
}
a[m]++;
c = getchar(); //同时还在读字符,如果字符不为空格,那么就退出下面这层循环,那么就可以i++,相当于又读了一行了
if(c != ' '){
break;
}
}
}
for(int i = min;i < max;i++){ //利用数组来计算每个数字出现的次数,最后输出内些一次都没出现过,和出现多次的数组
if(a[i] == 0){
x = i;
}
if(a[i] >= 2){
y = i;
}
}
printf("%ld",x);
printf(" ");
printf("%ld",y);
return 0;
}