做法1:桶排记录数出现的次数
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5;
int a[N],b[N]={0};
int main()
{
int n,i=0,ans1,ans2;
cin>>n;
while(cin>>a[i])
{
b[a[i]]++; //记录数出现的次数
i++;
}
sort(a,a+i);
for(int j=a[0]+1;j<a[i-1];j++) //从a中最小数到最大数遍历
{
if(b[j]==0) ans1=j;
if(b[j]==2) ans2=j;
}
cout<<ans1<<" "<<ans2;
return 0;
}
做法2:stringstream读入
#include<iostream>
#include<sstream>
#include<algorithm>
using namespace std;
const int N=1e5;
int a[N];
int main()
{
int n,cnt=0,ans1=0,ans2=0;
cin>>n;
string str;
getline(cin,str); //cin与getline连用时要用getline清除一下
while(n--)
{
getline(cin,str); //按行读入
stringstream line;
line<<str; //输入line
while(line>>a[cnt]) //输出line
{
cnt++;
}
}
sort(a,a+cnt);
for(int i=0;i<cnt-1;i++)
{
if(a[i+1]-a[i]==2&&!ans1)
{
ans1=a[i]+1;
}
if(a[i+1]-a[i]==0&&!ans2)
{
ans2=a[i];
}
}
cout<<ans1<<" "<<ans2;
return 0;
}