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

C++でバイナリ文字列「ab」を解放するための操作の数


「ab」を含むことができる文字列が与えられ、タスクは文字列から「ab」を削除または削除するために必要な操作の数を計算することです。したがって、私たちのタスクは、最初に文字列に「ab」が含まれているかどうかを確認することです。含まれている場合は、文字列「ab」を解放する必要があります。

入力 − string str ="ababaa"

出力 −バイナリ文字列「ab」を解放するための操作の数は− 4

説明 −文字列からわかるように、「ab」パターンが2回発生しているため、「ab」を「bba」に置き換えて、操作の数を1にし、文字列をbbaabaaにします。ここでも、「ab」を「bba」に置き換えて、操作の数を2にし、文字列をbbabbaaaにします。もう1つの「ab」があるので、操作の数は3で、文字列はbbabbaaaになります。調べた「ab」を「bba」に置き換え続けると、文字列は「ab」フリーになります。

入力 − str ="abaa"

出力 −バイナリ文字列「ab」を解放するための操作の数は− 1

説明 −文字列からわかるように、「ab」パターンが1回発生しているため、「ab」を「bba」に置き換えて、操作の数を1にし、文字列をbbaaaにします。これで、文字列は「ab」フリーになり、カウントは1になります。

以下のプログラムで使用されているアプローチは次のとおりです

  • 文字列を入力して文字列の長さを計算し、データを関数に渡してさらに処理します。

  • 文字列「ab」を解放するために必要な操作を格納するための一時変数カウントを宣言します。

  • 文字列の長さ+1のサイズの文字配列を作成します

  • strcpy()メソッドを使用して文字列の文字を配列に格納します。

  • 0から文字列の長さまでループFORを開始します

  • ループ内で、IF arr [length --i --1] =‘a’をチェックし、カウントをカウント+ 0として設定し、合計変数を合計*2として設定します

  • それ以外の場合は、合計のカウントを1つ増やします。

  • カウントを返す

  • 結果を印刷します。

#include<bits/stdc++.h>
using namespace std;
int operations_ab_free(string str, int len){
   int count = 0;
   char arr[length + 1];
   strcpy(arr, str.c_str());
   int total = 0;
   for (int i = 0; i < len; i++){
      if (arr[len - i - 1] == 'a'){
         count = (count + total);
         total = (total * 2);
      }
      else{
         total++;
      }
   }
   return count;
}
int main(){
   string str = "ababaa";
   int length = str.length();
   cout<<"Count of operations to make a binary string “ab” free are: "<<operations_ab_free(str,
length)<<endl;
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of operations to make a binary string “ab” free are: 4

  1. C++でバイナリ行列をゼロ行列に変換する演算の数をカウントするプログラム

    バイナリ行列があるとします。ここで、1つのセルを取得し、そのセルとそのすべての隣接セル(上、下、左、右)を反転する操作について考えてみます。行列に0のみが含まれるように、必要な操作の最小数を見つける必要があります。解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 0 1 0 その場合、出力は3になります。 これを解決するには、次の手順に従います- サイズの配列ディレクトリを定義します:4 x 2:={{1、0}、{0、1}、{-1、0}、{0、-1}} const int inf =10 ^ 6 関数getP

  2. C++で高さhのバランスの取れた二分木を数える

    二分木の高さHが与えられます。目標は、指定された高さのバランスの取れたバイナリツリーの数/数を見つけることです。 二分木 −は、各ノードに最大2つの子(左の子と右の子)を持つツリーデータ構造です。 高さバランスのとれた二分木 −は、すべてのノードの2つのサブツリーの深さが1または0だけ異なるバイナリツリーとして定義されます。これは、すべてのノードの左側のサブツリーと右側のサブツリーの高さであり、最大差は1です。 次の図には、高さh=3で可能な高さのバランスが取れた二分木が含まれています。 入力 Height H=2 出力 Count of Balanced Binary Trees