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

C++で隣接する2つが黄色にならないように2つの色で階段をペイントする方法


n個の階段と2色(赤と黄色)があり、これらの階段をペイントすることができます。私たちの仕事は、2つの連続するステップが黄色にならないように、階段をペイントできる方法の数を数えることです。

問題を理解するために例を見てみましょう

入力

3

出力

5

説明

The ways in which stairs can be painted are YRY, RYR, YRR, RRY, RRR. here R denotes red color, Y denotes yellow color.

この問題を解決するために、階段をペイントする方法の数を見てみましょう。

N =1、ways(1)=2:R、Y

N =2、ways(2)=3:RY、YR、RR

N =3、ways(3)=5:RYR、YRY、RRY、YRR、RRR

N =4、ways(4)=8:YRYR、RYRY、RYRR、YRRY、YRRR、RRYR、RRRR、RRRY。

したがって、これらのケースから、これは最初の要素として2、2番目の要素として3で始まるフィボナッチ数列であると導き出すことができます。

ロジックの動作を説明するプログラム

#include <iostream>
using namespace std;
int colorSteps(int n) {
   int first = 2;
   int next = 3;
   for (int i = 3; i <= n; i++) {
      next = first + next;
      first = next - first;
   }
   return next;
}
int main(){
   int n = 6;
   cout<<"Number of ways to color "<<n<<" steps is "<<colorSteps(n);
   return 0;
}

出力

Number of ways to color 6 steps is 21

  1. C++プログラムの動的計画法を使用して2つが隣接しないようなバイナリツリーのノードの最大合計

    この問題では、各ノードに値を持つバイナリツリーが与えられます。私たちのタスクは、2つが隣接しないようにバイナリツリー内のノードの最大合計を見つけるプログラムを作成することです。動的計画法を使用します。 問題の説明 −ノードが直接接続されないように合計が最大になるように、バイナリツリーのサブセットを選択します。 問題を理解するために例を見てみましょう 入力 出力 24 説明 Elements to be taken under consideration are: 8 + 5 + 9 + 2 = 24 ソリューションアプローチ この問題の解決策は、マップを使用して、ノードがmaxS

  2. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ