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