【问题描述】
从标准输入中输入两组整数(每组不超过20个整数,每组整数中的元素不重复,并且整数大于等于0),编程求两组整数的交集,即在两组整数中都出现的整数,并按从小到大顺序排序输出。若交集为空,则什么都不输出。
【输入形式】
在两行上分别输入两组整数,以一个空格分隔各个整数,以-1作为输入结束。
【输出形式】
按从小到大顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
【样例输入】
5 105 0 4 32 8 7 9 60 -1
5 2 87 10 105 0 32 -1
【样例输出】
0 5 32 105
【样例说明】
第一组整数有9个,分别为5 105 0 4 32 8 7 9 60,第二组整数有7个,分别为5 2 87 10 105 0 32。在这两组整数中都出现的整数有四个,按从小到大顺序排序后输出的结果为0 5 32 105
解题思路:其实对于c++中已经定义好的东西最好可以用,应为可以让你的程序运行更快和代码量更
从题目上我们了解到不仅要求交集而且要排序,如果要用其他的一般的方法,不仅要考虑对两个数组的取交集
还要对他们进行排序sort(),但若使用map就一下就全搞定了
另外:这里也有一个坑,就是最后的一个空格可有可无,但你还是要考虑,你遍历的长度也可以说是你输入的长度
要大于20,注意这里并不是数组的长度,只是让他从输入流中去除,防止对下一个数组的输入的影响
下面附上我的c++代码:
#include <iostream>
#include <map>
using namespace std;
int main()
{
int c;
map<int,int> mymap;
for(int i=0; i<=20;i++)
{
cin >> c;
if(c==(-1))
{
break;
}
mymap[c]++;
}
for(int i=0; i<=20;i++)
{
cin >> c;
if(c==(-1))
{
break;
}
mymap[c]++;
}
map<int,int>::iterator iter;
iter = mymap.begin();
for(;iter!=mymap.end();iter++)
{
if(((iter->second)==2)&&(iter->first!=-1))
{
cout << iter->first << " ";
}
}
return 0;
}