数组中的元素不能被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],为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