这道题问题倒不是很难,但是输入输出比较麻烦:
js
#include<bits/stdc++.h>
using namespace std;
vector<int>v;
map<int,int>m;
int a[1005];
void s2i(string &temp,int &a)
{
stringstream ss;
ss<<temp;
ss>>a;
}
int main()
{
int line;cin>>line;getchar();
int index=0;
for(int i=0;i<line;i++)
{
string x;
getline(cin,x);
//拆分
istringstream ss(x);
string temp;
while(getline(ss,temp,' '))
{
s2i(temp,a[index++]);
}
}
for(int i=1;i<index;i++)
{
if(a[i]==a[i-1]+2)printf("%d ",a[i]-1);
if(a[i]==a[i-1])printf("%d",a[i]);
}
return 0;
}
最后要排序,不排序就错了。这是没排序的:
原因:
没有排序时的数组a:
当遍历到a[i-1]=12,a[i]=10的时候,因为差值为2,又输出了a[i]-1,即11.
因此我们需要排序:
排完序的:
看答案没毛病,但是实际上还有一点小问题,就是假如我们在遍历的工程中先遇到重复的就直接输出了,但是题目要求一定要先输出断号的再输出重复的,因此我们需要用两个变量来保存一下,最后输出变量:
js
#include<bits/stdc++.h>
using namespace std;
int a[10005];
void s2i(string &temp,int &a)
{
stringstream ss;
ss<<temp;
ss>>a;
}
int main()
{
int line;cin>>line;getchar();
int index=0;
for(int i=0;i<line;i++)
{
string x;
getline(cin,x);
//拆分
istringstream ss(x);
string temp;
while(getline(ss,temp,' '))
{
s2i(temp,a[index++]);
}
}
//cout<<index<<endl; 检查输入的数据个数
int duanhao,chongfu;
sort(a,a+index);
for(int i=1;i<index;i++)
{
if(a[i]==a[i-1]+2) duanhao=a[i]-1;
if(a[i]==a[i-1]) chongfu=a[i];
}
printf("%d %d",duanhao,chongfu);
return 0;
}