http://oj.ecustacm.cn/problem.php?id=1423
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
int hush[100005];
int a[105];
int main(void)
{
int number;
int id;//重复
int id1;//缺失
int i;
cin>>number;//读取行
while(cin>>number)
{
if(hush[number]==true)
{
id=number;//找到了重复
}
hush[number]=true;
}
for(i=0;i<100050;i++)
{
if(hush[i])//找到从哪里开始
{
break;
}
}
for(i=i;i<=100050;i++)
{
if(hush[i]==false)//找到断电
{
id1=i;
break;
}
}
cout<<id1<<" "<<id<<endl;
return 0;
}
另一种写法:
#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
int a[100500];
int main(void)
{
int n; cin>>n;
int i=0;
string str;
getline(cin,str);
while(n--)
{
getline(cin,str);
stringstream ssin(str);
while(ssin>>a[i]) i++;
}
sort(a,a+i);
int res1,res2;
for(int j=1;j<i;j++)
{
if(a[j]==a[j-1])
res1=a[j];
if(a[j]-a[j-1]==2)
res2=a[j]-1;
}
cout<<res2<<" "<<res1<<endl;
return 0;
}
注意: 在用 getline()时要 先读一次。
因为getline会吸收上一次cin>>n的换行。所以需要提前读一次 消除换行。