首页 > 解决方案 > 三个数组的并集、交集和差集

问题描述

在这段代码中,我尝试创建三个数组。使用这三个数组,我成功地尝试建立联合。但是当我想做一个交叉点时,我做不到。

#include <stdio.h>

int main()
{
    int dizi1Sinir, dizi1Deger; // ilk alt kumenin degiskenleri     
    int dizi2Sinir, dizi2Deger; // ikinci alt kumenin degiskenleri
    int dizi3Sinir, dizi3Deger; // ucuncu alt kumenin degiskenleri



    // BIRINCI ALT KUME TANIMLAMA ISLEMLERI

    printf("ilk alt kumen kac elemanli olsun?\n");
    scanf("%d", &dizi1Sinir);

    int alt_kume_1[dizi1Sinir]; // ilk alt kume

    for(dizi1Deger = 0; dizi1Deger < dizi1Sinir; dizi1Deger++)
    {   
        printf("dizinin elemanlarini gir.\n %dnci eleman = ", dizi1Deger + 1); 
        scanf("%d", &alt_kume_1[dizi1Deger]);
    }

    // -------------------------------------------------------------------------------

    //IKINCI ALT KUME TANIMLAMA ISLEMLERI

    printf("ikinci alt kumen kac elemanlı olsun?\n");
    scanf("%d", &dizi2Sinir);

    int alt_kume_2[dizi2Sinir]; // ikinci alt kume

    for(dizi2Deger = 0; dizi2Deger < dizi2Sinir; dizi2Deger++)
    {   
        printf("dizinin elemanlarini gir.\n %dnci eleman = ", dizi2Deger + 1); 
        scanf("%d", &alt_kume_2[dizi2Deger]);
    }


//UCUNCU ALT KUME TANIMLAMA ISLEMLERI


    printf("ucuncu alt kumen kac elemanli olsun?\n");
    scanf("%d", &dizi3Sinir);

    int alt_kume_3[dizi3Sinir]; // ucuncu alt kume

    for(dizi3Deger = 0; dizi3Deger < dizi3Sinir; dizi3Deger++)
    {   
        printf("dizinin elemanlarini gir.\n %dnci eleman = ", dizi3Deger + 1); 
        scanf("%d", &alt_kume_3[dizi3Deger]);
    }


    //---------------------------------
    int azami=dizi1Sinir+dizi2Sinir+dizi3Sinir;
    int birlesim[azami];

    int i;
    for(i=0;i<azami;i++)
    {
        if(i<dizi1Sinir)
            birlesim[i]=alt_kume_1[i];
        else if(i-dizi1Sinir<dizi2Sinir)
            birlesim[i]=alt_kume_2[i-dizi1Sinir];
        else
            birlesim[i]=alt_kume_3[i-dizi1Sinir-dizi2Sinir];
    }
    //-----------------------------



    //Ayni Elemanlari Sil (-1)

    for(i=0;i<azami;i++)
    {
        int tempSayi=birlesim[i];
        int j;
        for(j = 0;j<i;j++)
        {
            if(birlesim[j]==tempSayi)
            {
                birlesim[i]=-1;

            }
        }
    }

    printf("\nbirlesim = ");
    for(i = 0; i < azami; i++)
    {
        if(birlesim[i]!=-1)
            printf("%d ", birlesim[i]);
    }

标签: c

解决方案


int main() {

//************************

printf("\ninsertion dizi_1 and dizi_2 :  ");
intersection_two_arrays(alt_kume_1,dizi1Sinir,alt_kume_2,dizi2Sinir);
printf("\ninsertion dizi_1 and dizi_3 :  ");
intersection_two_arrays(alt_kume_1,dizi1Sinir,alt_kume_3,dizi3Sinir);
printf("\ninsertion dizi_2 and dizi_3 :  ");
intersection_two_arrays(alt_kume_2,dizi2Sinir,alt_kume_3,dizi3Sinir);   

printf("\ninsertion dizi_1 dizi_2 and dizi_3 :  ");
intersection_three_arrays(alt_kume_1,dizi1Sinir,alt_kume_2,dizi2Sinir,alt_kume_3,dizi3Sinir);

//...etc
//*************************

printf("\nDifference dizi_1 - dizi_2 :  ");
differenceX_Y(alt_kume_1,dizi1Sinir,alt_kume_2,dizi2Sinir);
printf("\nDifference dizi_2 - dizi_1 :  ");
differenceX_Y(alt_kume_2,dizi2Sinir,alt_kume_1,dizi1Sinir);
printf("\nDifference dizi_2 - dizi_3 :  ");
differenceX_Y(alt_kume_2,dizi2Sinir,alt_kume_3,dizi3Sinir); 

printf("\nDifference dizi_1 - dizi_2 and dizi_3 :  ");
differenceX_YandZ(alt_kume_1,dizi1Sinir,alt_kume_2,dizi2Sinir,alt_kume_3,dizi3Sinir);   

//...etc
//*************************

}

功能1:两组的交集

void intersection_two_arrays(int kume_1[], int sinir1 , int kume_2[] , int sinir2)
{
    int i,j;
    int value;
    if(sinir1>sinir2) value=sinir2;
    else value=sinir1;
    int hold[value];
    int h=0;

    for(i=0; i<sinir1; i++) {
       for(j=0; j<sinir2; j++) {
          if(kume_1[i] == kume_2[j]) {
              hold[h++] = kume_1[i];
              continue;
          }         
       }
    }

    if(h==0) {
         printf("There is not common value");
    }

    else {
         for(i=0; i<h; i++) {
            printf("%d ", hold[i]);
         }
    }

}

功能2:三组的交集

void intersection_three_arrays(int kume_1[], int sinir1 , int kume_2[] , int sinir2, 
int kume_3[], int sinir3)
{
    int i,j;
    int value;
    if(sinir1>sinir2) value=sinir2;
    else value=sinir1;
    int hold[value];
    int h=0;

    for(i=0; i<sinir1; i++) {
        for(j=0; j<sinir2; j++) {
            if(kume_1[i] == kume_2[j]) {
                hold[h++] = kume_1[i];
                continue;
            }           
        }
    }

    intersection_two_arrays(hold,h, kume_3,sinir3);

}

功能 3:差分 XY

void differenceX_Y(int kume_1[], int sinir1 , int kume_2[] , int sinir2)
{
    int i,j;
    int value;
    if(sinir1>sinir2) value=sinir1;
    else value=sinir2;
    int hold[value];
    int h=0;
    int findEqual=0;


    for(i=0; i<sinir1; i++) {
        for(j=0; j<sinir2; j++) {
            if(kume_1[i] == kume_2[j]) {
               findEqual++;
               continue;    
            }           
        }
        if(findEqual==0) hold[h++] = kume_1[i];
        findEqual=0;
    }


    if(h==0) {
        printf("There is not different value.");
    }

    else {
        for(i=0; i<h; i++) {
            printf("%d ", hold[i]);
        }
    }

}

功能 4:差异 X-(Y 和 Z)

void differenceX_YandZ(int kume_1[], int sinir1 , int kume_2[] , int sinir2, int 
kume_3[], int sinir3)
{
    int i,j;
    int value;
    if(sinir1>sinir2) value=sinir1;
    else value=sinir2;
    int hold[value];
    int h=0;
    int findEqual=0;


    for(i=0; i<sinir1; i++) {
        for(j=0; j<sinir2; j++) {
            if(kume_1[i] == kume_2[j]) {
                findEqual++;
                continue;   
            }           
        }
        if(findEqual==0) hold[h++] = kume_1[i];
        findEqual=0;
    }   

    differenceX_Y(hold, h , kume_3, sinir3);

}

推荐阅读