假设断号不可能发生在最大和最小号。
每个整数代表一个ID号。
其中,m表示断号ID,n表示重号ID
2
5 6 8 11 910 12 9
7 9
113 130 176 154 177 120 117 150 114 183 186 181 100 163 160 167 147 198 111 119
105 120
这题难度,我觉得就在于怎么读数据。。。
话说,第一次见到输入的n是代表数据行数的,而且行数与数据个数没关系。。
好吧,getline吧,但是getline有点问题(我在VC6.0编的),
所以用的cin.getline。。。
恩,后来听队友说,用while(cin>>(int 类型)) 也能过,
我试了试,真能过啊。。。
幸亏是一组数据,要是多组数据。。。额。。。
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
int arr[10001];
int main()
{
int len,i,j,k,num,n;
char c[10001];
cin>>n;
getchar();
k=0;
for(i=0;i<n;++i)
{
cin.getline(c,1001);
num=0;
for(j=0;c[j]!='\0';++j)
{
if(c[j]!=' ') num=num*10+c[j]-'0';
else
{
arr[k++]=num;
num=0;
}
}
arr[k++]=num;
}
// 发票号排序
int repeat,vacancy;
sort(arr,arr+k);
// 寻找重复的发票号
for(i=2;i<k;++i)
if(arr[i]==arr[i-1]) repeat=arr[i];
// 寻找漏掉的发票号
for(i=2;i<k;++i)
if(arr[i]!=arr[i-1]+1)
if(arr[i]!=repeat)
vacancy=arr[i-1]+1;
cout<<vacancy<<" "<<repeat<<endl;
return 0;
}
第二种方法,就是while(cin>>(int 类型数据))
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
int arr[10001];
int main()
{
int i,k,n;
cin>>n;
k=0;
while(cin>>arr[k++])
{
}
// 发票号排序
int repeat,vacancy;
sort(arr,arr+k);
// 寻找重复的发票号
for(i=1;i<k;++i)
if(arr[i]==arr[i-1]) repeat=arr[i];
// 寻找漏掉的发票号
for(i=1;i<k;++i)
if(arr[i]!=arr[i-1]+1)
if(arr[i]!=repeat)
vacancy=arr[i-1]+1;
cout<<vacancy<<" "<<repeat<<endl;
return 0;
}