我在C ++中编写了一个函数,用于查找2组的交集和并集。
我尝试了以下功能:
交叉口功能:bool member (int x[10],int s[10])
{
bool result=false;
for (int i=0; i<10; i++)
for (int j=0 ; j<10;j++)
if (x[i]==s[j])
result=true;
return result;
}
int intersection(int s1[10],int s2[10],int s3[10])
{
for ( int i=0 ; i<10 ; i++)
{
if (member(s1,s2)==true)
s3[i]=s1[i];
}
return 0;
}
答案 0 :(得分:1)
您可以尝试以下两组用户输入大小的并集和交集:
#include<stdio.h>
#include<malloc.h>
void main()
{
int *a, *b, *c, *d, n1, n2, i, j, k=0, l=0, flag=0;
printf("Enter number of elements in A and B : ");
scanf("%d %d",&n1,&n2);
a = (int *)malloc(sizeof(int)*n1);
b = (int *)malloc(sizeof(int)*n2);
c = (int *)malloc(sizeof(int)*((n1>n2)?n1:n2));
d = (int *)malloc(sizeof(int)*(n1+n2));
printf("\nEnter element in set A : ");
for(i=0;i<n1;i++)
{
printf("\nEnter element : ");
scanf("%d",&a[i]);
}
printf("\nEnter elements in set B : ");
for(i=0;i<n2;i++)
{
printf("\nEnter element : ");
scanf("%d",&b[i]);
}
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
{
if(a[i]==b[j])
{
c[l++]=a[i];
j=0;
break;
}
}
}
for(i=0;i<n2;i++)
d[k++]=a[i];
for(i=0;i<n1;i++)
{
flag=0;
for(j=0;j<n2;j++)
{
if(b[i]==a[j])
{
flag=1;
break;
}
}
if(!flag)
d[k++]=b[i];
}
printf("\n\t A = {");
for(i=0;i<n1;i++)
{
printf("%d",a[i]);
}
printf("}");
printf("\n\t B = {");
for(i=0;i<n2;i++)
{
printf("%d",b[i]);
}
printf("}");
printf("\n\t A U B = {");
for(i=0;i<k;i++)
{
printf("%d",d[i]);
}
printf("}");
printf("\n\t A n B = {");
for(i=0;i<l;i++)
{
printf("%d",c[i]);
}
printf("}");
}
答案 1 :(得分:0)
如果s1
返回s3
,那么您在member(s1, s2)
中复制true
,一次只复制一项,即如果它是s1
之间的交集点和s2
您应该以这种方式重写(谨慎:未经测试)
bool member (int x, int s[10])
{
bool result=false;
for (int j=0 ; (! result) && (j<10);j++)
if (x==s[j])
result=true;
return result;
}
int intersection(int s1[10],int s2[10],int s3[10])
{
int j = -1;
for ( int i=0 ; i<10 ; i++)
{
if (member(s1[i],s2)==true)
s3[++j]=s1[i];
}
// what about other places of s3?
return 0;
}