Trong bài toán này, chúng ta được cung cấp một dãy bin [] kích thước n của các chuỗi nhị phân. Nhiệm vụ của chúng tôi là tạo một chương trình để tìm Bitwise OR (&) của n chuỗi nhị phân.
Ở đây, chúng tôi sẽ lấy tất cả các số và tìm bitwise AND của chúng, tức là bin [0] | bin [1] | ... bin [n-2] | bin [n]
Hãy lấy một ví dụ để hiểu vấn đề,
Đầu vào -
bin[] = {“1001”, “11001”, “010101”}
Đầu ra -
011101
Giải thích - Bitwise HOẶC của tất cả chuỗi nhị phân -
(1001) | (11001) | (010101) = 011101
Để giải quyết vấn đề này, chúng ta chỉ cần tìm chuỗi có số bit lớn nhất (chuỗi có độ dài tối đa). Sau đó, chúng tôi sẽ thêm một số thích hợp 0 đứng đầu cho tất cả các chuỗi. Sau đó, tìm Bitwise OR của các bit.
Hãy lấy một ví dụ để cho thấy hoạt động của thuật toán -
bin[] = {“1101”, “011010” , “00111”}
Chuỗi có độ dài tối đa là 011010 với độ dài 6. Vì vậy, chúng tôi sẽ thêm các số 0 ở đầu vào các chuỗi khác.
Các chuỗi đã cập nhật - “001101”, “011010”, “000111”.
Tìm BITWISE OR của tất cả các chuỗi - 001101 | 011010 | 000111 =011111
Ví dụ
Chương trình minh họa hoạt động của giải pháp của chúng tôi -
#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; }
Đầu ra
The bitwise OR of all the binary String of the string array is 011111