C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++で文字列から二分木を構築する

    括弧と整数で構成される文字列があるとします。その文字列から二分木を構築する必要があります。入力全体が二分木を表します。これは、0、1、または2組の括弧が後に続く整数を保持します。整数はルートの値を表し、括弧のペアには同じ構造の子二分木が含まれます。 したがって、入力が「4(2(3)(1))(6(5))」の場合、出力は[3,2,1,4,5,6](順序付き走査)になります これを解決するには、次の手順に従います- 関数solve()を定義します。これには、s、idx、が必要です。 =sのサイズの場合、- nullを返す num:=空の文字列 while(

  2. 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”},