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.