इस समस्या में, हमें दो सरणियां 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, तो फ्लैग = -1, जारी रखें।
चरण 2.3: यदि फ्लैग != -1, तो arr1[i] प्रिंट करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम:
उदाहरण
#include <iostream>
using namespace std;
void findEleNotDivisibleByArray(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 ";
findEleNotDivisibleByArray(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 के सबसे बड़े तत्व तक उनके सभी गुणकों को चिह्नित करेंगे। और उन सभी तत्वों को प्रिंट करेंगे जो isDivisible सरणी में false चिह्नित हैं।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम (कुशल संस्करण):
उदाहरण
#include <iostream>
using namespace std;
void findEleNotDivisibleByArray(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 + 1] = {0};
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 ";
findEleNotDivisibleByArray(arr1, arr2, arr1Size, arr2Size);
return 0;
}
आउटपुट:
Elements of an array that are not divisible by any element of another array are 17