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

C / C ++で連続した1のないバイナリ文字列の数をカウントするプログラム?


ここで、1つの興味深い問題が発生します。 nの値が1つ与えられたとします。連続する1がないように、長さnのすべての文字列を見つける必要があります。 n =2の場合、数値は{00、01、10}なので、出力は3です。

動的計画法を使用してそれを解決できます。テーブル「a」と「b」があるとします。ここで、arr [i]は、連続する1が存在せず、0で終わる長さiのバイナリ文字列の数を格納します。同様に、bは同じですが、1で終わる数を保持します。最後の1つに0または1を追加できます。は0ですが、最後の1が1の場合は0のみを追加します。

このアイデアを得るためのアルゴリズムを見てみましょう。

アルゴリズム

noConsecutiveOnes(n)-

Begin
   define array a and b of size n
   a[0] := 1
   b[0] := 1
   for i in range 1 to n, do
      a[i] := a[i-1] + b[i - 1]
      b[i] := a[i - 1]
   done
   return a[n-1] + b[n-1]
End

#include <iostream>
using namespace std;
int noConsecutiveOnes(int n) {
   int a[n], b[n];
   a[0] = 1;
   b[0] = 1;
   for (int i = 1; i < n; i++) {
      a[i] = a[i-1] + b[i-1];
      b[i] = a[i-1];
   }
   return a[n-1] + b[n-1];
}
int main() {
   cout << noConsecutiveOnes(4) << endl;
}

出力

8

  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. 連続する1’のないバイナリ文字列の数をカウントするPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −正の整数Nが与えられているので、文字列に連続する1が存在しないように、長さNで使用可能なすべての可能な個別のバイナリ文字列をカウントする必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # count the number of strings def countStrings(n):    a=[0 for i in range(n)]    b=[0 for i in range(n)]    a[0] = b[0]