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

C++のバイナリ文字列で10進値の部分文字列を数える


0と1の文字列のみが表示されます。文字列は、左から右に読み取られる2進数を表します。つまり、001は1ではなく4です。目標は、偶数の10進数を表すすべてのサブストリングを見つけることです。

これを行うには、すべてのサブストリングの最初の値をチェックします。0の場合、数値は1の場合でも、数値は奇数になります。このsbstr[0]=’0’のすべての部分文字列は10進数で偶数になるため、長さiでカウントをインクリメントします。

例を挙げて理解しましょう。

入力 − str =” 101”

出力 − 2進文字列内の偶数の10進値の部分文字列の数は− 2

説明 −可能な部分文字列は、10、11、01、0、1で、そのうち01は2、0は0、2は偶数です。

入力 − str =” 111”

出力 − 2進文字列内の偶数の10進値の部分文字列の数は− 0

説明 −可能な部分文字列は− 11,1であり、そのうちどれも偶数ではありません。

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

  • 文字列strを0と1のみとします。

  • strの長さをlen=str.length()

    に格納します
  • 関数count_even(string str、int length)は、文字列とその長さを受け取り、偶数の10進数を形成する部分文字列の数を返します。

  • FORループを使用して文字列をトラバースします

  • インデックスi=0からi

  • str [i] ==’0’の場合、それから始まるすべての部分文字列は10進数で偶数になります。

  • インクリメントは長さとしてカウントされます-i。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
int count_even(string str, int length){
   int count = 0;
   for (int i = 0; i < length; i++){
      if (str[i] == '0'){
         count += (length - i);
      }
   }
   return count;
}
int main(){
   string str = "00111";
   int len = str.length();
   cout<<"Count of even decimal value substrings in a binary string are: "<<count_even(str, len) << endl;
   return 0;
}

出力

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

Count of even decimal value substrings in a binary string are: 9

  1. C++の二分木で最大値の根を数える

    二分木ルートがあるとします。その値がすべての子孫の値以上であるノードの数をカウントする必要があります。 したがって、入力が次のような場合 その場合、出力は3を除くすべてのノードとして4になり、基準を満たします。 これを解決するには、次の手順に従います- 関数dfs()を定義します。これはノードを取ります ノードがnullでない場合、- 0を返す l:=dfs(ノードの左側) r:=dfs(ノードの右側) =lとrの最大値の場合、- (retを1増やします) x:=ノードのvalの最大値、lおよびr xを返す メイン

  2. C++での2進数から10進数への変換プログラム

    2進数を入力として指定すると、タスクは指定された2進数を10進数に変換することです。 コンピューターの10進数は10進数で表され、2進数は2進数の0と1の2つしかないため、2進数で表されますが、10進数は0〜9から始まる任意の数値にすることができます。 2進数を10進数に変換するには、右から左に向かって残りの数字を抽出し、0から始まる2の累乗を掛けて、(桁数)–1まで1ずつ増やします。乗算された値を加算し続けて、最終的な10進数値を取得します。 以下に、2進数を10進数に変換する図を示します。 例 Input-: 1010    0 will be conver