इस समस्या में, हमें आकार n की बाइनरी स्ट्रिंग्स की एक सरणी bin[] दी गई है। हमारा कार्य n बाइनरी स्ट्रिंग्स का बिटवाइज OR (|) ज्ञात करने के लिए एक प्रोग्राम बनाना है।
यहां, हम सभी संख्याओं को लेंगे और उनका बिटवाइज AND ढूंढेंगे यानी bin[0] | bin[1] |... bin[n-2] | bin[n]
उदाहरण
इनपुट -
bin[] = {"1001", "11001", "010101"}
आउटपुट -
011101
व्याख्या - सभी बाइनरी स्ट्रिंग्स का बिटवाइज OR -
(1001) | (11001) | (010101) = 011101
इस समस्या को हल करने के लिए, हम बस सबसे अधिक बिट्स वाली स्ट्रिंग (अधिकतम लंबाई वाली स्ट्रिंग) ढूंढेंगे। फिर हम सभी स्ट्रिंग्स में पर्याप्त संख्या में अग्रणी 0 जोड़ेंगे। फिर बिट्स का बिटवाइज OR ढूंढेंगे।
उदाहरण
bin[] = {"1101", "011010" , "00111"}
अधिकतम लंबाई वाली स्ट्रिंग 011010 है जिसकी लंबाई 6 है। तो, हम अन्य स्ट्रिंग्स में अग्रणी 0 जोड़ेंगे।
अपडेटेड स्ट्रिंग्स - "001101", "011010", "000111"।
सभी स्ट्रिंग्स का बिटवाइज OR ढूंढना - 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 << "स्ट्रिंग सरणी की सभी बाइनरी स्ट्रिंग्स का बिटवाइज OR " << bitwiseOR(bin, n);
return 0;
}
आउटपुट
स्ट्रिंग सरणी की सभी बाइनरी स्ट्रिंग्स का बिटवाइज OR 011111