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

C++で0と1のみを持つ長さNのバイナリ文字列の数をカウントします


たとえば、numという数字が与えられます。タスクは、oと1のみを含む与えられた数字numから形成できるバイナリ文字列の数を計算することです。

2進数システムは、数値表現手法の一種です。これは最も人気があり、デジタルシステムで使用されています。バイナリシステムは、2つの動作状態または可能な条件しかない任意のデバイスで表すことができるバイナリ量を表すために使用されます。たとえば、スイッチには、開いている状態と閉じている状態の2つしかありません。

バイナリシステムでは、2つのシンボルまたは可能な数字値、つまり0と1のみがあります。2つの動作状態または可能な条件しかないデバイスによって表されます。バイナリ文字列は、バイナリ値、つまり0または1のいずれかを含む文字列です

Input − num = 3
Output − count is 8

説明 −長さ3で形成できるバイナリの組み合わせは、000、111、001、101、100、110、011、010です。これは、合計8であるため、カウントは8です。

Input − num = 2
Output − count is 4

説明 −長さ2で形成できるバイナリの組み合わせは、合計4であるため、00、11、01、10です。したがって、カウントは4です。

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

  • 数字は任意の桁の長さにすることができる限り、long型の数字を入力してください

  • mod値を(long long)(le9 + 7)

    として計算します
  • カウントを計算する関数を作成します

  • カウントと別の変数tempを格納する一時変数を宣言し、2で初期化します。

  • numをtemp=temp%modとして設定します

  • num> 0

    のときにループを開始します
  • IF num&1を確認し、カウントを(count * temp)%modとして設定します

  • num =num>>1を設定

  • Set temp =(temp * temp)%mod

  • 返品数

  • 結果を印刷します。

#include <iostream>
using namespace std;
#define ll long long
#define mod (ll)(1e9 + 7)
// An iterative function to find (x^y)%p in O(log y)
ll power(ll x, ll y, ll p){
   ll result = 1;
   x = x % p; // Update x if it is more than or
   // equal to p
   while (y > 0){
      // If y is odd, multiply x with result
      if (y & 1){
         result = (result * x) % p;
      }
      // y must be even now
      y = y >> 1; // y = y/2
      x = (x * x) % p;
   }
   return result;
}
// Function to count the number of binary strings
ll countbstring(ll num){
   int count = power(2, num, mod);
   return count;
}
int main(){
   ll num = 3;
   cout <<"count is: "<<countbstring(num);
   return 0;
}

出力

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

count is: 8

  1. 階段の数と各階段のステップ数をカウントするC++プログラム

    n個の要素を持つ配列Aがあるとします。アマルが高層ビルの階段を上っていくようにしましょう。登るたびに、1から数え始めます。たとえば、3段と4段の2つの階段を上る場合、1、2、3、1、2、3、4のような数字を話します。配列Aでは、数字はアマルが言った階段の数字を表しています。彼が登った階段の数を数え、各階段の階段の数も印刷する必要があります。 したがって、入力がA =[1、2、3、1、2、3、4、5]の場合、出力は2、[3、5]になります。 ステップ これを解決するには、次の手順に従います- p = 0 n := size of A for initialize i := 0, when i

  2. 最大ベンド数のC++パス長

    二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s