任何人都可以告诉我为什么我没有得到正确的解决方案..几天前开始编程...
有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
答案 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;
哪个显然更容易阅读。