Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ปีนบันไดใน C++


มีบันได n ขั้น คนหนึ่งจะขึ้นบันไดที่ 1 ถึง n กำหนดจำนวนบันไดสูงสุดที่เขา/เธอสามารถข้ามได้ในขั้นตอนเดียว จากข้อมูลนี้ เราต้องหาวิธีที่เป็นไปได้ในการขึ้นบันไดที่ n ให้เราพิจารณาว่าแต่ละขั้นสามารถข้ามบันไดได้สูงสุดสองขั้น ดังนั้นเราจึงสามารถหาความสัมพันธ์แบบเรียกซ้ำเพื่อแก้ปัญหานี้ได้ หนึ่งสามารถย้ายไปที่บันไดที่ n ไม่ว่าจะจากบันไดที่ (n-1) หรือจากบันไดที่ (n-2) ดังนั้น วิธี(n) =วิธี(n-1) + วิธี(n-2)

สมมุติว่าจำนวนขั้นบันไดคือ 10 จำนวนขั้นบันไดสูงสุดที่สามารถกระโดดได้ในขั้นตอนเดียว พูดเป็น 2 แล้วเอาท์พุตจะเป็น 89 วิธี

ในการแก้ปัญหานี้ ให้ทำตามขั้นตอนเหล่านี้ -

  • กำหนดจำนวนอาร์เรย์ที่มีขนาดเท่ากับหมายเลขขั้นบันได
  • นับ[0] :=1
  • สำหรับ i :=2 ขึ้นบันได -1 ทำ
    • นับ[i] :=0
    • สำหรับ j =1 ถึง i และ j <=สูงสุด; ทำ
      • นับ[i] :=นับ[i] + นับ[i - j]
  • นับคืน[บันได - 1]

มาดูการใช้งานกันให้เกิดความเข้าใจกันมากขึ้น

ตัวอย่าง (C++)

#include<iostream>
using namespace std;
int stairClimbWays(int stair, int max){
   int count[stair]; //fill the result stair using bottom up manner
   count[0] = 1; //when there are 0 or 1 stair, 1 way to climb
   count[1] = 1;
   for (int i=2; i<stair; i++){ //for stair 2 to higher
      count[i] = 0;
      for(int j=1; j<=max && j<=i; j++)
         count[i] += count[i-j];
   }
   return count[stair-1];
}
int countWays(int stair, int max){ //person can climb 1,2,...max stairs at a time
   return stairClimbWays(stair+1, max);
}
int main (){
   int stair, max;
   cout << "Enter number of stairs: "; cin >> stair;
   cout << "Enter max stair a person can climb: "; cin >> max;
   cout << "Number of ways to reach: " << countWays(stair, max);
}

อินพุต

Stairs = 10
Max stairs a person can climb: 2

ผลลัพธ์

Enter number of stairs: 10
Enter max stair a person can climb: 2
Number of ways to reach: 89