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

C++ में कम से कम एक गैर-खाली सब-सरणी के बिटवाइज़ AND वाली संख्याएं


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

इनपुट: nums[] = { 3, 5, 1, 2, 8 } आउटपुट: { 2, 5, 0, 3, 8, 1 } व्याख्या: 2, सबएरे {2} का बिटवाइज़ AND है, 5, सबएरे {5} का बिटवाइज़ AND है, 0, सबएरे {1, 2}, {2, 8} और {1, 2, 8} का बिटवाइज़ AND है, 3, सबएरे {3} का बिटवाइज़ AND है, 8, सबएरे {8} का बिटवाइज़ AND है, 1, सबएरे {1}, {3, 5} और {3, 5, 1} का बिटवाइज़ AND है। इनपुट: nums[] = { 2, 6, 3, 8, 1 } आउटपुट: { 1, 8, 3, 6, 2, 0 }

समाधान खोजने का दृष्टिकोण

एक सरल दृष्टिकोण जिसे लागू किया जा सकता है,

  • सभी संभावित गैर-खाली सबएरे ढूंढें।

  • सरणी के माध्यम से पार करते समय, सबएरे में प्रत्येक तत्व का बिटवाइज़ AND निकालें।

  • डुप्लिकेट मानों से बचने के लिए, सभी परिणामों को एक सेट में स्टोर करें।

उदाहरण

 #include <bits/stdc++.h> using namespace std; int main(){     int arr[] ={ 2, 6, 3, 8, 1 };     int n = sizeof(arr) / sizeof(arr[0]);     // प्रत्येक AND ऑपरेशन के परिणाम को स्टोर करने के लिए सेट घोषित करना।     unordered_set<int> result;     int val;     // नेस्टेड लूप सभी संभावित गैर-खाली सबएरे के माध्यम से पार करने के लिए।     for (int i = 0; i < n; ++i){         for (int j = i, val = INT_MAX; j < n; ++j){             val = val & arr[j];             // AND ऑपरेशन का परिणाम स्टोर करना             result.insert(val);         }     }     cout << "All possible numbers are: ";     // सेट के सभी मान प्रिंट करना।     for (auto i = result.begin(); i != result.end();i++)         cout << *i << " ";     return 0; }

आउटपुट

All possible numbers are: 1 8 3 6 0 2

उपरोक्त कोड की व्याख्या

  • AND ऑपरेशन के सभी परिणामों को स्टोर करने के लिए सेट घोषित करना।

  • 'val' वेरिएबल को INT_MAX से इनिशियलाइज़ करना क्योंकि हमें सभी बिट्स को 1 पर सेट करके AND ऑपरेशन करना है।

  • ith इंडेक्स से सभी संभावित सबएरे के माध्यम से जाने के लिए अंदर लूप।

  • प्रत्येक तत्व का एक दूसरे के साथ AND ऑपरेशन निकालना और result सेट में स्टोर करना।

  • result सेट के सभी मान प्रिंट करना।

निष्कर्ष

इस ट्यूटोरियल में, हमने इस समस्या को हल करने के लिए एक सरल दृष्टिकोण पर चर्चा की, यानी हर संभावित सबएरे में AND ऑपरेशन की गणना करना। हमने इस समस्या को हल करने के लिए C++ प्रोग्राम पर भी चर्चा की। साथ ही, आप इस कोड को Java, C, Python आदि किसी अन्य भाषा में लिख सकते हैं। आशा है आपको यह ट्यूटोरियल उपयोगी लगा होगा।

  1. - C++ में डिवाइड एंड कंकर का उपयोग करके अधिकतम योग सबएरे

    मान लीजिए हमारे पास धनात्मक और ऋणात्मक मानों के साथ डेटा की एक सूची है। हमें सन्निहित सबएरे का योग ढूंढना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम सबएरे का योग 7 है। यह {6, -2, -3, 1, 5} का योग है।हम इस समस्या को डिवाइड एंड कंकर विधि का उपयोग करके हल

  1. - C++ में योग और GCD दिए जाने पर दो संख्याएं ढूंढना

    हमारे पास दो संख्याओं a और b का योग और GCD है। हमें दोनों संख्याएं a और b ढूंढनी हैं। यदि यह संभव नहीं है, तो -1 लौटाएं। मान लीजिए योग 6 है और GCD 2 है, तो संख्याएं 4 और 2 हैं।दृष्टिकोण ऐसा है, चूंकि GCD दिया गया है, तो यह ज्ञात है कि संख्याएं इसके गुणक होंगी। अब निम्न चरण हैंयदि हम पहली संख्या को G

  1. - C++ में डिवाइड एंड कन्कर एल्गोरिदम का उपयोग करके अधिकतम सबएरे योग

    मान लीजिए हमारे पास धनात्मक और ऋणात्मक मानों वाले डेटा की एक सूची है। हमें सन्निहित सबएरे का योग ढूंढना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम सबएरे का योग 7 है। यह {6, -2, -3, 1, 5} का योग है। हम इस समस्या को डिवाइड एंड कन्कर विधि का उपयोग करके हल