เราได้รับบันได n ขั้น และ 2 สี (แดงและเหลือง) ที่จะใช้ทาบันไดเหล่านี้ งานของเราคือนับจำนวนวิธีที่เราสามารถทาสีบันไดได้ โดยที่ไม่มีสองขั้นติดกันที่เป็นสีเหลือง
ตัวอย่าง
อินพุต
3
เอาต์พุต
5
คำอธิบาย
วิธีที่บันไดสามารถทาสีได้คือ YRY, RYR, YRR, RRY, RRR ที่นี่ R แทนสีแดง, Y แทนสีเหลือง
เพื่อแก้ปัญหานี้ ลองดูจำนวนวิธีที่บันไดสามารถทาสีได้:
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
จากกรณีเหล่านี้ เราสามารถสรุปได้ว่า นี่คือ ลำดับฟีบอนัชชี (Fibonacci Series) เริ่มต้นด้วย 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