用兩種顏色(紅色和黃色)粉刷樓梯,使得相鄰的樓梯不能都是黃色的 C++ 方法


假設我們有 n 個臺階,以及兩種顏色(紅色和黃色)來粉刷這些臺階。我們的任務是計算可以粉刷這些臺階的方法數量,使得沒有兩個連續的臺階是黃色的。

讓我們舉個例子來理解這個問題,

輸入

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,方法(1) = 2:R,Y

N = 2,方法(2) = 3:RY,YR,RR

N = 3,方法(3) = 5:RYR,YRY,RRY,YRR,RRR

N = 4,方法(4) = 8:YRYR,RYRY,RYRR,YRRY,YRRR,RRYR,RRRR,RRRY。

所以從這些例子中,我們可以推匯出這是一個斐波那契數列,以 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

更新於: 2020-07-17

119 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告