C++ 中数组元素不被另一个数组中的任何元素整除


在这个问题中,我们给定两个数组 arr1[] 和 arr2[]。我们的任务是创建一个程序来查找数组中不被另一个数组中的任何元素整除的元素

问题描述:这里,我们需要找到 arr1 中所有不被 arr2 中任何元素整除的元素。

让我们举个例子来理解这个问题,

输入:arr1[] = {17, 15, 5, 12, 8}        arr2[] = {5, 4}

输出:17

解释 -

arr1 的元素及其整除的元素,

17 -> 没有元素可以整除它。
15 -> 5 整除该元素。
5 -> 5 整除该元素。

12 -> 4 整除该元素。

8 -> 4 整除该元素。

解决方案方法 -

解决此问题的一个简单且朴素的方法是使用直接方法。我们将遍历 arr1,对于 arr1 的每个元素,我们将检查 arr2 的任何元素是否整除该元素。如果没有元素整除它,则打印该元素。

算法 -

步骤 1:循环遍历 arr1,i -> 0 到 n-1。

步骤 2.1:对于每个 arr1[i],循环遍历 arr2,对于 j -> 0 到 n-1。

步骤 2.2.1 :如果 arr1[i] % arr2[j] == 0,则继续 flag = -1。

步骤 2.3:如果 flag != -1,则打印 arr1[i]。

程序说明我们解决方案的工作原理,

示例

实时演示

#include<iostream>
using namespace std;

void findEleNotDivisbleByArray(int arr1[], int arr2[], int arr1Size, int arr2Size) {
   
   int flag = 0;
   for (int i = 0; i < arr1Size; i++) {
      flag = 0;
      for (int j = 0; j < arr2Size; j++){
         
         if( arr1[i] % arr2[j] == 0 ) {
            flag = -1;   
            break;
         }
      }
      if ( flag == 0 )
            cout<<arr1[i]<<"\t";
   }
}

int main()
{
   int arr1[] = {17, 15, 5, 12, 23, 8};
   int arr2[] = {5, 4};
   int arr1Size = sizeof(arr1)/sizeof(arr1[0]);
   int arr2Size = sizeof(arr2)/sizeof(arr2[0]);
   cout<<"Elements of an array that are not divisible by any element of another array are ";
   findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size);
   return 0;
}

输出 -

Elements of an array that are not divisible by any element of another array are 17 23

此解决方案有效,但效率不高。因此,让我们看看解决此问题的有效解决方案,

在这种方法中,我们将创建 arr1 元素的数组 isDivisible[]。对于 arr2 的所有元素,标记它们直到 arr1 最大元素的所有倍数。并打印 isDisible 数组中标记为 false 的所有元素。

程序说明我们解决方案的工作原理,

示例

实时演示

#include<iostream>
using namespace std;

void findEleNotDivisbleByArray(int arr1[], int arr2[], int arr1Size, int arr2Size) {
   
   int maxEle = 0;
   for (int i = 0; i < arr1Size; i++)
      if (arr1[i] > maxEle)
         maxEle = arr1[i];

   int mark[maxEle];
   for (int i = 0; i < arr2Size; i++)
      for (int j = arr2[i]; j <= maxEle; j += arr2[i])
         mark[j] = 1;
   for (int i = 0; i < arr1Size; i++)
      if ( mark[arr1[i]] != 1)
         cout << arr1[i] << endl;
}

int main()
{
   int arr1[] = {17, 15, 5, 12, 8};
   int arr2[] = {5, 4};
   int arr1Size = sizeof(arr1)/sizeof(arr1[0]);
   int arr2Size = sizeof(arr2)/sizeof(arr2[0]);
   cout<<"Elements of an array that are not divisible by any element of another array are ";
   findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size);
   return 0;
}

输出 -

Elements of an array that are not divisible by any element of another array are 17

更新于: 2021年1月22日

346 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.