交叉2套

时间:2016-04-30 14:58:27

标签: c++ function intersection

我在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;
} 

2 个答案:

答案 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;
}