কম্পিউটার টিউটোরিয়াল

C++-এ সিডি চড়া (Climbing Stairs)


nটি সিডি রয়েছে। একজন ব্যক্তি ১ নম্বর থেকে n-তম সিডি পর্যন্ত যাবে। এক ধাপে সর্বোচ্চ কতটি সিডি পার করা যাবে সেটিও দেওয়া আছে। এই তথ্য দিয়ে n-তম সিডিতে পৌঁছানোর সম্ভাব্য পথের সংখ্যা বের করতে হবে। ধরি এক ধাপে সর্বোচ্চ দুটি সিডি পার করা যায়। তখন আমরা রিকার্সিভ রিলেশন দিয়ে সমাধান করতে পারি। কেউ n-তম সিডিতে যেতে পারে (n-1)-তম সিডি থেকে বা (n-2)-তম সিডি থেকে। তাই ways(n) = ways(n-1) + ways(n-2)।

সিডির সংখ্যা যদি ১০ হয়, এক ধাপে সর্বোচ্চ ২টি সিডি পার করা যায়, তবে আউটপুট হবে ৮৯টি সম্ভাব্য পথ।

এটি সমাধানের জন্য নিচের ধাপগুলো অনুসরণ করুন −

  • সিডির সংখ্যা সমান আকারের count অ্যারে ডিফাইন করুন
  • count[0] := 1
  • for i := 2 to stair -1, do
    • count[i] := 0
    • for j = 1 to i and j <= max; do
      • count[i] := count[i] + count[i - j]
  • return count[stair - 1]

নিচের ইমপ্লিমেন্টেশন দেখে ভালোভাবে বুঝতে পারবেন

উদাহরণ (C++)

#include<iostream> using namespace std; int stairClimbWays(int stair, int max){    int count[stair]; //নিচ থেকে উপরে ফলাফল সিডি দিয়ে পূরণ    count[0] = 1; //যখন ০ বা ১টি সিডি থাকে, চড়ার ১টি পথ    count[1] = 1;    for (int i=2; i<stair; i++){ //সিডি ২ থেকে উপরের জন্য       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){ //ব্যক্তি ১,২,...max সিডি একসাথে চড়তে পারে    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

  1. লিনাক্সে C++-এর জন্য সেরা IDE কী?

  2. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  3. উইন্ডোজে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  4. পাইথনে মিন কস্ট ক্লাইমবিং স্টেয়ার্স (Min Cost Climbing Stairs)