求两组整数的交集a

【问题描述】

从标准输入中输入两组整数(每组不超过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;
}


猜你喜欢

转载自blog.csdn.net/qq_41682681/article/details/80739396