c - 在查找两个输入数组的并集和交集的 C 程序中,我在交集部分遇到问题

标签 c arrays

在查找两个输入数组的并集和交集的 C 程序中,我在交集部分遇到问题。问题是当我打印出交集数组 I[u + z] 时,输出只有一个重复的数字,而没有打印两个数组的其他交集。代码部分有问题出在代码末尾

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, z, f ;
    printf("Enter size of array\n");
    scanf("%d", &n);
    int a[n];
    if(n <= 20) {
        for(int i = 0 ; i < n; i++) {
            printf("Enter integer \n");
            scanf("%d", &a[i]);
        }
    }
    for(int i = 0 ; i < n; i++) {
        printf("%d " ,a[i]);
    }
    printf("\nEnter size of the 2nd array\n");
    scanf("%d", &z);
    int b[z];
    if(z <= 20 ){
        for(int i = 0 ; i < z; i++) {
            printf("Enter integer \n");
            scanf("%d", &b[i]);
        }
    }
    for(int i = 0 ; i < z; i++) {
            printf("%d " ,b[i]);
    }
    for(int i = 0 ; i < n; i++) {
        for(int j = i + 1; j < n; j++) {
            if(a[i] == a[j]) {
                for(int l = j; l < n; l++)
                {
                    a[l] = a[l + 1];
                }
                n--;
                j--;
            }
        }
    }
    printf("\nArray1: ");
    for(int i = 0 ; i < n; i++) {
        printf("%d ", a[i]);
    }

    for(int t = 0; t < z; t++) {
        for(int u = t + 1; u < z; u++) {
            if(b[t] == b[u]) {
                for(int l = u; l < z; l++)
                {
                    b[l] = b[l + 1];
                }
                z--;
                u--;
            }
        }
    }
    printf("\nArray2: ");
    for(int e = 0; e < z; e++) {
        printf("%d ", b[e]);
    }
    int u[n + z] ; //union

    for(int i = 0; i < n; i++) {
        u[i] = a[i];
    }
    for(int i = n ; i < n + z; i++) {
        u[i] = b[i - n];
    }
    for(int i = n ; i < n + z; i++) { //remove repeated values from union
        for(int j = i + 1; j < n + z; j++) {
            if(u[i] == u[j]) {
                for(int l = j; l < n + z; l++)
                {
                    u[l] = u[l + 1];
                }
                n + z--;
                j--;
            }
        }
    }
    printf("\n union is ");
    for(int i = n ; i < n + z; i++) {
        printf("%d ",u[i]);
    }

    // to get intersection  
    int I[n + z]; // to get intersection
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < z; j++) {
            if(a[i] == b[j]) {
                for(int k = 0; k < n + z; k++) {
                    I[k] = a[i];
                }
            }
        }
    }
    printf("\n intersection is ");
    for(int i = 0; i < n + z; i++) {
        printf("%d ", I[i]);
    }
    return 0;
}

最佳答案

当发现相等时,您应该只添加一个数字,而不是整个数组。

// to get intersection  
int I[n + z];
k = 0;
for(int i = 0; i < n; i++)
    for(int j = 0; j < z; j++)
        if(a[i] == b[j]) {
            I[k++] = a[i];
            break;
        }
printf("\n intersection is ");
for(int i = 0; i < k; i++)
    printf("%d ", I[i]);

关于c - 在查找两个输入数组的并集和交集的 C 程序中,我在交集部分遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649171/

相关文章:

java - (Java) 使用二维数组的 Tic-Tac-Toe 游戏

c - OpenSSL - IPv6 支持

c - C中的字符串反向程序

c - C 中的 Scanf 错误

java字符串分割成数组,如何将char im分割成同一个数组?

关于大小的字符数组与字符指针

c - C 中的素数生成器

c - 作为 C 结构成员的函数指针数组

java - 需要帮助修复 java 程序

对象的 Javascript 计数数组