如何在数组中找到相交元素

时间:2018-07-08 06:21:47

标签: c++ arrays

任何人都可以告诉我为什么我没有得到正确的解决方案..几天前开始编程...

有3个数组,如果元素较少则代码可以工作.. idk是什么问题..请给我解决方案谢谢..

这是我的代码:-

int arr1[]={1,2,3,5,7,8,9,11,12,18};
int arr2[]={2,3,4,12};
int arr3[]={2,3,5,12,19};
int arr4[10];
int k=0;
int x=0,y=0,z=0;

while(arr3[z]!=19)
{
    if(arr1[x]==arr2[y] && arr2[y]==arr3[z])
    {
        arr4[k]=arr1[x];
        cout<<" intersecting element found "<<arr4[k];
        k++;
        x++;y++;z++;
    }
    else if(arr1[x]<arr2[y])
    {
        x++;
    }
    else if(arr2[y]<arr2[z])
    {
        y++;
    }
    else
    {
        z++;
    }

}
for(int i=0;i<k;i++)
{
    cout<<endl<<" o/p "<<arr4[i];
}

对于给定的数组,其工作完美,显示2、3和12,但是如果我在array2中加5,则相交元素仅显示为2和3 ...而o / p应该为2,3,5,12

1 个答案:

答案 0 :(得分:1)

您可以通过在彼此的“ for”循环中一次遍历所有数组来完成此操作。

示例:-

int arr1[] = { 1,2,3,5,7,8,9,11,12,18 };
int arr2[] = { 2,3,4,12,5 };
int arr3[] = { 2,3,5,12,19 };
int arr4[10];
int index = 0;
for (auto i = 0; i < GetArraySize(arr1); i++)
    for (auto j = 0; j < GetArraySize(arr2); j++)
        for (auto k = 0; k < GetArraySize(arr3); k++)
            if (arr1[i] == arr2[j] && arr2[j] == arr3[k])
            {
                arr4[index] = arr1[i];
                index++;
                cout << arr1[i] << " is an intersecting element!" << endl;
            }
for (auto i = 0; i < index; i++)
    cout << " o/p " << arr4[i] << endl;

并将此行放在主要功能之外:-

#define GetArraySize(Array) signed(sizeof Array / sizeof Array[0])

此行为我们提供了数组的大小,在此处进行了说明:How do I find the length of an array?

如果您的编译器支持 C ++ 11 ,则可以只使用基于范围的“ for”循环,这比常规循环更容易阅读。 / p>

如果您要使用基于范围的“ for”循环,则它看起来像:-

int arr1[] = { 1,2,3,5,7,8,9,11,12,18 };
int arr2[] = { 2,3,4,12,5 };
int arr3[] = { 2,3,5,12,19 };
int arr4[10];
int index = 0;
for (auto &elem : arr1)
    for (auto &elem2 : arr2)
        for (auto &elem3 : arr3)
            if (elem == elem2 && elem2 == elem3)
            {
                arr4[index] = elem;
                index++;
                cout << elem << " is an intersecting element!" << endl;
            }
for (auto i = 0; i < index; i++)
    cout << " o/p " << arr4[i] << endl;

哪个显然更容易阅读。