Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में सरणी के उन तत्वों को प्रिंट करें जो कम से कम एक अन्य तत्व से विभाज्य हों


इस समस्या में, हमें पूर्णांकों की एक सरणी दी गई है और हमें केवल उन संख्याओं को प्रिंट करना है जो सरणी के कम से कम एक अन्य तत्व से विभाज्य हैं।

आइए एक उदाहरण लेकर अवधारणा को बेहतर ढंग से समझते हैं,

Input : 3 12 16 21 Output : 12 21

व्याख्या - 3 सबसे छोटा है इसलिए यह किसी अन्य संख्या से विभाज्य नहीं हो सकता। 12 जो 3 से विभाज्य है, 16, 3 से विभाज्य नहीं है और फिर 21 जो 3 से विभाज्य है। तो, हम 3 और 16 को नजरअंदाज करेंगे।

एक आसान तरीका है कि जांचें कि क्या सभी तत्व सरणी के किसी अन्य तत्व से विभाज्य हैं या नहीं। लेकिन यह समस्या का सबसे अच्छा संभव समाधान नहीं है।

हैश का उपयोग करना एक बेहतर समाधान हो सकता है। हम सरणी के तत्वों को हैश में संग्रहीत करेंगे और फिर सरणी का अधिकतम तत्व ढूंढेंगे। और फिर इस अधिकतम तत्व तक दिए गए संख्या के गुणक ढूंढेंगे और यदि गुणक हैश में मिलते हैं तो तत्व सरणी के कम से कम एक तत्व से विभाजित होता है। ऐसे ही, हम उस तत्व को प्रिंट करेंगे जो सरणी के कम से कम एक तत्व से विभाजित होता है।

उदाहरण

अब, इस अवधारणा के आधार पर आइए एक प्रोग्राम बनाते हैं -

#include <bits/stdc++.h> using namespace std; void printDivisibleNumber(int arr[], int n){     unordered_set<int> s;     int maxElement = INT_MIN;     for (int i = 0; i < n; i++) {         s.insert(arr[i]);         maxElement = max(maxElement, arr[i]);     }     unordered_set<int> res;     for (int i = 0; i < n; i++) {         if (arr[i] != 0) {             for (int j = arr[i] * 2; j <= maxElement; j += arr[i]) {                 if (s.find(j) != s.end())                     res.insert(j);             }         }     }     unordered_map<int, int> mp;     for (int i = 0; i <n; i++)         mp[arr[i]]++;     unordered_map<int, int>::iterator it;     vector<int> ans;     for (it = mp.begin(); it != mp.end(); it++) {         if (it->second >= 2) {             if (res.find(it->first) == res.end()) {                 int val = it->second;                 while (val--)                     ans.push_back(it->first);             }         }         if (res.find(it->first) != res.end()) {             int val = it->second;             while (val--)                 ans.push_back(it->first);         }     }     for (auto x : ans)         cout<<x<<"\t"; } int main(){     int arr[] = {2, 4, 7 , 12 , 14 };     int n = sizeof(arr) / sizeof(arr[0]);     printDivisibleNumber(arr, n);     return 0; }

आउटपुट

12 14 4

  1. सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++ सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++

    इस समस्या में, हमें एक सर्कुलर ऐरे cirArr[] दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में सर्कुलर ऐरे में अधिकतम योग ढूंढे जहाँ कोई दो आसन्न तत्व न हों।समस्या विवरणसर्कुलर ऐरे के लिए, हमें ऐरे के तत्वों का अधिकतम योग ढूंढना है जहाँ आसन्न तत्वों को नहीं लिया जा सकता, यानी हमें वैकल्पिक तत

  1. - C++ में वह न्यूनतम मान जो एक संख्या को विभाजित करे और दूसरी से विभाज्य हो

    समस्या कथन दो पूर्णांक p और q दिए गए हैं, कार्य न्यूनतम संभव संख्या x ढूंढना है जैसे कि q % x = 0 और x % p = 0। यदि शर्तें किसी संख्या के लिए सही नहीं हैं, तो -1 प्रिंट करें। उदाहरण यदि p = 3 और q = 66 तो उत्तर 3 है क्योंकि: 66 % 3 = 0 3 % 3 = 0 एल्गोरिदम यदि कोई संख्या x दी गई शर्त को पूरा करती

  1. - C++ का उपयोग करके सरणी में ऐसा तत्व खोजें जिससे सभी तत्व विभाज्य हों

    मान लीजिए हमारे पास कुछ तत्वों के साथ एक सरणी A है। हमें A से एक ऐसा तत्व ढूंढना है जिससे सभी तत्व इससे विभाज्य हों। मान लीजिए A = [15, 21, 69, 33, 3, 72, 81] है, तो तत्व 3 होगा, क्योंकि सभी संख्याएं 3 से विभाज्य हैं। इस समस्या को हल करने के लिए, हम A में सबसे छोटी संख्या लेंगे, फिर जांचेंगे कि क्य