C程序找到联盟和交集

时间:2013-09-24 23:19:00

标签: c

以下是我的代码:

#include <stdio.h>

void arrays()
{
    int i,n,j;
    printf("Enter the size of the arrays:\n");
    scanf("%d",&n);

    int a1[n];
    int a2[n];
    int intersection[2*n], unions[n];
    printf("Enter elements of the first array:\n");

    for (i = 0; i < n; i++)
    {
        scanf("%d",&a1[i]);
    }
    printf("Enter elements of the second array:\n");
    for (j = 0; j < n; j++)
    {
        scanf("%d",&a2[j]);
    }
    int indexs = -1, indexu = -1;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            unions[++indexu] = a1[j];
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if(a1[i] == a2[j])
            {
                intersection[++indexs] = a2[j];
            }
            else
            {
                unions[++indexu] = a2[j];
            }
        }
    }

    printf("Intersection:\n");
    printf("Union:\n");
    for(i = 0; i < indexs; i++)
        printf("%d",intersection[i]);
    for (j = 0; j < indexu; j++)
        printf("%d" ,unions[j]);
}

现在,我很难找到联盟和交汇点。我试图修复我的循环,但我找不到问题所在 我这样做的方法是先将第一个数组与第二个数组进行比较。因为union表示两个数组中的所有元素。然后第二个是找到重复的数字将首先到达交叉点。或者如果没有存储在联合中的元素。它也会进入union数组。 有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

其中一个问题出在您的输出部分。

printf("Intersection:\n");
printf("Union:\n");
for(i = 0; i < indexs; i++)
    printf("%d",intersection[i]);
for (j = 0; j < indexu; j++)
    printf("%d" ,unions[j]);

此代码段在打印数组内容之前打印出"Intersection:\n""Union:\n"。这就是为什么你认为它不会显示交集

正确的代码应该是:

printf("Intersection:\n");
for(i = 0; i <= indexs; i++)
    printf("%d",intersection[i]);
printf("\n");
printf("Union:\n");
for (j = 0; j <= indexu; j++)
    printf("%d" ,unions[j]);
printf("\n");