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

C++でn回反復した後に取得されたバイナリ文字列でi番目のインデックス文字を検索します


バイナリ文字列ビンがあるとします。次に、それにn回の反復を適用し、各反復で0が01になり、1が10になります。その後、n回目の反復後の文字列のi番目のインデックス文字。したがって、バイナリ文字列が101、n =2、i =3の場合、最初の反復後は100110になり、次の反復では100101101001になるため、i番目のインデックスは1を保持します。

これを解決するには、次の手順に従う必要があります-

  • ループをn回実行し、各反復で文字列に対して別のループを実行します
    • バイナリ文字列の各文字を変換します。0の場合は01を格納し、1の場合は10を別の一時文字列に格納します。
    • 内部ループの完了後、一時文字列をバイナリ文字列に格納します。
  • 次に、i番目のインデックスを返します。

#include<iostream>
using namespace std;
char getCharacter(string bin_str, int n, int i) {
   string temp = "";
   for (int x = 0; x < n; x++) {
      for (int y = 0; y < bin_str.length(); y++) {
         if (bin_str[y] == '1')
            temp += "10";
         else
            temp += "01";
      }
      bin_str = temp;
      temp = "";
   }
   return bin_str[i];
}
int main() {
   int n = 2;
   string bin = "101";
   cout << 3 << "rd character is: "<< getCharacter(bin, n, 3)<<endl;
   cout << 9 << "th character is: "<< getCharacter(bin, n, 9);
}

出力

3rd character is: 1
9th character is: 0

  1. C++で二分木の葉を見つける

    二分木があるとします。すべての葉を集めて取り除き、木が空になるまで繰り返します。 したがって、入力が次のような場合 その場合、出力は[[4,5,3]、[2]、[1]]になります。 これを解決するには、次の手順に従います- 1つのマップszを定義する 1つの2D配列retを定義する 関数dfs()を定義します。これはノードを取ります ノードがnullの場合、- sz [ノードの値]:=1 + dfs(ノードの左側)とdfs(ノードの右側)の最大値 retのサイズ

  2. C ++を使用して、括弧の文字列から等しい点を見つけます。

    ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字