C++でのN個のバイナリ文字列のビットごとのOR
この問題では、サイズnのバイナリ文字列の配列bin[]が与えられます。私たちのタスクは、n個のバイナリ文字列のビットごとのOR(&)を見つけるプログラムを作成することです。
ここでは、すべての数値を取得し、それらのビットごとのANDを見つけます。つまりbin [0] | bin [1] | ... bin [n-2] | bin [n]
問題を理解するために例を見てみましょう
入力 −
bin[] = {“1001”, “11001”, “010101”}
出力 −
011101
説明 −すべてのバイナリ文字列のビットごとのOR −
(1001) | (11001) | (010101) = 011101
この問題を解決するために、ビット数が最大の文字列(最大長の文字列)を見つけるだけです。次に、適切な数の先行ゼロをすべての文字列に追加します。次に、ビットのビットごとのORを見つけます。
アルゴリズムの動作を示す例を見てみましょう-
bin[] = {“1101”, “011010” , “00111”}
最大長の文字列は011010で、長さは6です。したがって、先行ゼロを他の文字列に追加します。
更新された文字列-「001101」、「011010」、「000111」。
すべての文字列のBITWISEORを検索する− 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
-
C++で文字列から二分木を構築する
括弧と整数で構成される文字列があるとします。その文字列から二分木を構築する必要があります。入力全体が二分木を表します。これは、0、1、または2組の括弧が後に続く整数を保持します。整数はルートの値を表し、括弧のペアには同じ構造の子二分木が含まれます。 したがって、入力が「4(2(3)(1))(6(5))」の場合、出力は[3,2,1,4,5,6](順序付き走査)になります これを解決するには、次の手順に従います- 関数solve()を定義します。これには、s、idx、が必要です。 =sのサイズの場合、- nullを返す num:=空の文字列 while(
-
C++で2つのバイナリ文字列を追加するプログラム
2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},