इस समस्या में, हमें बाइनरी स्ट्रिंग्स के आकार n का एक सरणी बिन [] दिया जाता है। हमारा काम n बाइनरी स्ट्रिंग्स के बिटवाइज़ OR (&) को खोजने के लिए एक प्रोग्राम बनाना है।
यहां, हम सभी नंबर लेंगे और बिटवाइज और उनमें से यानी बिन [0] | . का पता लगाएंगे बिन [1] |... बिन [एन-2] | बिन[n]
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट -
bin[] = {“1001”, “11001”, “010101”}
आउटपुट -
011101
स्पष्टीकरण − बिटवाइज़ या सभी बाइनरी स्ट्रिंग के −
(1001) | (11001) | (010101) = 011101
इस समस्या को हल करने के लिए, हम केवल सबसे बड़ी संख्या में बिट्स (अधिकतम लंबाई स्ट्रिंग) के साथ स्ट्रिंग पाएंगे। फिर हम सभी स्ट्रिंग्स में पर्याप्त संख्या में अग्रणी 0 जोड़ देंगे। फिर बिटवाइज़ या बिट्स का पता लगाएं।
आइए एल्गोरिथम की कार्यप्रणाली को दिखाने के लिए एक उदाहरण लेते हैं -
bin[] = {“1101”, “011010” , “00111”}
लंबाई 6 के साथ अधिकतम लंबाई स्ट्रिंग 011010 है। इसलिए, हम अन्य स्ट्रिंग्स में अग्रणी 0 जोड़ देंगे।
अपडेटेड स्ट्रिंग्स - "001101", "011010", "000111"।
बिटवाइज़ या सभी स्ट्रिंग्स ढूँढना - 001101 | 011010 | 000111 =011111
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम -
#include <bits/stdc++.h> using namespace std; string bitwiseOR(string* bin, int n){ string result; int max_size = INT_MIN; for (int i = 0; i < n; i++) { max_size = max(max_size, (int)bin[i].size()); reverse(bin[i].begin(), bin[i].end()); } for (int i = 0; i < n; i++) { string s; for (int j = 0; j < max_size - bin[i].size(); j++) s += '0'; bin[i] = bin[i] + s; } for (int i = 0; i < max_size; i++) { int insertBit = 0; for (int j = 0; j < n; j++) insertBit = insertBit | (bin[j][i] - '0'); result += (insertBit + '0'); } reverse(result.begin(), result.end()); return result; } int main() { string bin[] = { "1101", "011010", "00111" }; int n = sizeof(bin) / sizeof(bin[0]); cout<<"The bitwise OR of all the binary String of the string array is "<<bitwiseOR(bin, n); return 0; }
आउटपुट
The bitwise OR of all the binary String of the string array is 011111