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

C++で連続する2がない1と2を使用してスコアに到達する方法を数えます


実行のスコアが与えられます。目標は、打者が1つのボールでのみ1回または2回のランを取ることができる方法でそのスコアに到達することです。制限は、2回の実行を連続して行うことはできないということです。たとえば、指定されたスコア6に到達するには、1 + 2 + 1 + 2のように実行できますが、2 + 2 + 1 + 1や、2つの連続した2を使用するその他の方法は使用できません。

入力

score=4

出力

Count of ways to reach a score using 1 and 2 with no consecutive 2s are: 4

説明

The ways in which we can reach the score 4 in following ways:
1+1+1+1, 1+1+2, 1+2+1, 2+1+1

入力

score=5

出力

Count of ways to reach a score using 1 and 2 with no consecutive 2s are: 6

説明

The ways in which we can reach the score 6 in following ways:
1+1+1+1+1, 2+1+1+1, 1+2+1+1 , 1+1+2+1, 1+1+1+2, 2+1+2

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

このアプローチでは、フラグを使用して、前のスコアが2であったかどうかをマークします。2だった場合は、次の実行でスコアを1としてカバーします。

  • 整数変数スコアを取ります。

  • フラグ変数check=falseを最初に取得します。

  • 関数ways_reach_score(int score、bool check)は、連続する2がない1と2を使用してスコアに到達する方法の数を示します。

  • 初期カウントを0とします。

  • スコアが0の場合は、0を返します。

  • チェックがfalseの場合、前回の実行が1であったことを意味します。したがって、現在のスコアが大きい場合、ウェイはcount =Ways_reach_score(score − 1、false)+ Ways_reach_score(score − 2、true)になります。

  • それ以外の場合、前回の実行は2であったため、結果の実行は1のみになり、wayはways_reach_score(score − 1、false)になります。

  • 最後に、合計数の方法を取得します。

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

#include <bits/stdc++.h>
using namespace std;
int ways_reach_score(int score, bool check){
   int count = 0;
   if (score == 0){
      return 1;
   }
   if (check == false && score > 1){
      count += ways_reach_score(score − 1, false) + ways_reach_score(score − 2, true);
   } else {
      count += ways_reach_score(score − 1, false);
   }
   return count;
}
int main(){
   int score = 4;
   bool check = false;
   cout<<"Count of ways to reach a score using 1 and 2 with no consecutive 2s are: "<<ways_reach_score(score, check);
   return 0;
}

出力

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

Count of ways to reach a score using 1 and 2 with no consecutive 2s are: 4

  1. C++でSTLを使用して配列とベクトルを操作する

    配列とベクトルは、問題を解決するための競技プログラミングにおいて非常に重要なデータ構造です。そしてSTL(標準テンプレートライブラリ )C ++プログラミングでは、配列とベクトルの演算を実行するためのいくつかの関数を提供します。 これらの機能のいくつかを実際に見てみましょう 配列/ベクトルの合計、最小値、最大値を見つける − STLには、配列/ベクトルの合計、最大、および最小を見つけるのに役立つ関数があります。そこの機能を備えた機能 合計を求める accumulate(startIndex, endIndex, initialSum) 配列/ベクトルの最大要素 *max_element(s

  2. C ++でSTLを使用して、バイナリ配列の1と0の数を数えます

    このチュートリアルでは、C++のSTLを使用してバイナリ配列の1と0の数をカウントするプログラムについて説明します。 このために、アレイが提供されます。私たちのタスクは、配列に存在する0と1の数を数えることです。 例 #include <bits/stdc++.h> using namespace std; // checking if element is 1 or not bool isOne(int i){    if (i == 1)       return true;    else