高分悬赏!!!请高手用C++:求集合{1,3,5,8,9}和集合{2,3,6,8,9,15}的交集,并输出结果.

2024-11-13 16:19:44
推荐回答(4个)
回答(1):

#include
void main()
{
int i,j,n=0;
int a[5]={1,3,5,8,9};
int b[6]={2,3,6,8,9,15};
int c[100];
for(i=0;i<5;i++)
for(j=0;j<6;j++)
if(a[i]==b[j])
{
c[n]=b[j];
n++;
}
cout<}

要是只是求你给的两个集合的交集的话,这样就已经足够了!不过这其实还是可以实现通用的,既然你没问,那也就算了!呵呵!
第一次答题,支持一个!

回答(2):

#include
#include
#include
#include
using namespace std;
int main()
{
set setA,setB;//定义两个集合setA,和setB
int a[]={1,3,5,8,9},b[]={2,3,6,8,9,15};
setA.insert(a,a+sizeof(a)/sizeof(int));//将数组a中的数据插入集合setA中
setB.insert(b,b+sizeof(b)/sizeof(int));
set_intersection(setA.begin(),setA.end(),setB.begin(),setB.end(),ostream_iterator(cout," "));//求出setA和setB的交集并输出
cout< system("pause");
return 0;
}

以下就是VC6的PJ定义的求集合交集的一个算法
template inline
_OI set_intersection(_II1 _F1, _II1 _L1, _II2 _F2, _II2 _L2,
_OI _X)
{for (; _F1 != _L1 && _F2 != _L2; )
if (*_F1 < *_F2)
++_F1;
else if (*_F2 < *_F1)
++_F2;
else
*_X++ = *_F1++, ++_F2;
return (_X); }

回答(3):

#include "stdafx.h"
#include
using namespace std;

void main()
{
int a[] = {1,3,5,8,9}; //第一个集合
int b[] = {2,3,6,8,9,15};//第二个集合
for (int i = 0;i < 5;i ++)//把第一个集合里的数一个一个拿出来
{
for (int j = 0;j < 6; j++)//和第二个集合里的每一个数比较
{
if (a[i] == b[j])//如果相等
{
cout< break;//然后跳出一次循环,以免在第二个集合里找到两个和第一个集合里某一元素相同的值
}
}
}
cout<}

回答(4):

如果只解决特定的这个集合,两个方法都可以。

但是对于通用性,

用set的方法好像不能处理,像

{1, 1, 2, 4, 5, 6, 9}

{1, 1, 3, 4, 5, 7, 9}

这种情况吧,

交集是{1, 1, 4, 5, 9}

用set则不能得到这个结果。

用两层循环肯定是可以达到通用性的,感觉也只能这样。