题目背景
某涉密单位下发了某种票据,并要在年终全部收回。
题目描述
每张票据有唯一的 ID 号,全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。
你的任务是通过编程,找出断号的 ID 和重号的 ID。
数据保证断号不可能发生在最大和最小号。
输入格式
一个整数 N(N<100)N(N<100) 表示后面数据行数,接着读入 NN 行数据,每行数据长度不等,是用空格分开的若干个(不大于 100100 个)正整数(不大于 10^5105),每个整数代表一个 ID 号。
输出格式
要求程序首先输入要求程序输出 11 行,含两个整数 mm,nn,用空格分隔,其中,mm 表示断号 ID,nn 表示重号 ID。
/*遍历:
1.排序
2.sort函数找出最小的数
3.寻找断点
4.寻找两个相同的数*/
//#include<sstream>
//#include<algorithm>
#include<bits/stdc++.h>//c++万能头文件
using namespace std;
int a[10001],l;
int main()
{
int N,m,n,i;
string s;
cin>>N;
cin.ignore(numeric_limits<streamsize>::max(),"\n");//把回车前的所有数据都清除掉
for(i=1;i<=N;i++)
{
getline(cin,s);//getline的优点就是在输入字符串的时候可以输入空格
stringstream sin(s);//定义一个字符串输入流的对象sin,并调用sin的 复制构造函数
//将s中所包含的字符串放入sin 对象中
while(sin>>a[++l]);
}
sort(a+1,a+l+1);//对数组中的元素进行排序
for(i=2;i<=l;i++)
{
if(a[i]==a[i+1]-2) m=a[i]+1;//如1,3中存在断点则满足此条件3-1=2
else if(a[i]==a[i+1]) n=a[i];
}
printf("%d %d\n",m,n) ;
return 0;
}