在这个问题中,我们给了两个数组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],为j-> 0到n-1循环arr2。
步骤2.2.1: 如果arr1 [i]%arr2 [j] == 0,则继续标记= -1。
步骤2.3:如果标志!= -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<<"不能被另一个数组的任何元素整除的数组元素是 "; findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size); return 0; }
不能被另一个数组的任何元素整除的数组元素是 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<<"不能被另一个数组的任何元素整除的数组元素是 "; findEleNotDivisbleByArray(arr1, arr2, arr1Size, arr2Size); return 0; }
不能被另一个数组的任何元素整除的数组元素是 17