https://www.acwing.com/problem/content/1206/
模拟题,但是输入方式有点恶心
可以用EOF方式读入,也可以用sstream读入
sstream可以参考这份
做法也有两种,可以定义bool数组遍历a[i],寻找被赋值两次的st[i]的重号,以及st[i]值为0的断号
或是简单sort一遍,直接遍历满足a[i]=a[i-1]即为重号,满足a[i]==a[i-1]+2即为断号
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
const int N = 100010;
int n,flag1,flag2;
bool st[N];
int a[N];
int num;
//做法1
int main()
{
cin >> n;
int i=0;
while(cin >> a[i++])num++;
//重号
//利用布尔数组判断最初全为假的时候,是否有ID有过赋值导致其布尔值为1;
for(int i=0;i<num;i++)
{
if(st[a[i]])flag1=a[i];
st[a[i]]=1;
}
int start=0;
while(!st[start])start++;
//断号
//布尔数组中为假即为不存在的断号
for(int i=start;i<start+num;i++)
if(!st[i])flag2=i;
cout << flag2 << ' ' << flag1 << endl;
return 0;
}
//做法2
int main()
{
cin >> n;
int i=0;
while(cin >> a[i++])num++;
sort(a,a+num);
for(int i=1;i<num;i++)
{
if(a[i]==a[i-1])flag1=a[i];
else if(a[i] == a[i-1]+2)flag2=a[i]-1;
}
cout << flag2 << ' ' << flag1 << endl;
return 0;
}
标签:错误,int,1204,cin,st,++,num,票据,include From: https://www.cnblogs.com/lxl-233/p/16755362.html