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

পাইথনে সিঁড়ির ধাপ চড়ার উপায় গণনা করার প্রোগ্রাম (সর্বোচ্চ k বার 3 ধাপ)


मान लीजिए हमारे पास n चरणों वाली एक सीढ़ी है और हमारे पास एक अन्य संख्या k है, प्रारंभ में हम चरण 0 पर हैं, और हम एक बार में 1, 2 या 3 चरण चढ़ सकते हैं। लेकिन हम अधिकतम k बार 3 सीढ़ियाँ चढ़ सकते हैं। अब हमें सीढ़ी चढ़ने के तरीकों की संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है n = 5, k = 2, तो आउटपुट होगा 13, क्योंकि सीढ़ियाँ चढ़ने के अलग-अलग तरीके हैं -

  • [1, 1, 1, 1, 1]
  • [2, 1, 1, 1]
  • [1, 2, 1, 1]
  • [1, 1, 2, 1]
  • [1, 1, 1, 2]
  • [1, 2, 2]
  • [2, 1, 2]
  • [2, 2, 1]
  • [1, 1, 3]
  • [1, 3, 1]
  • [3, 1, 1]
  • [2, 3]
  • [3, 2]

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

  • यदि n, 0 के समान है, तो
    • 1 वापस करें
  • यदि n, 1 के समान है, तो
    • 1 वापस करें
  • k := k और n का न्यूनतम
  • memo := आकार (n+1) x (k+1) का एक मैट्रिक्स
  • r के लिए 0 से k तक की रेंज में, करें
    • memo[r, 0] := 1, memo[r, 1] := 1, memo[r, 2] := 2
  • i के लिए 3 से n तक की रेंज में, करें
    • memo[0, i] := memo[0, i-1] + memo[0, i-2]
  • j के लिए 1 से k तक की रेंज में, करें
    • i के लिए 3 से n तक की रेंज में, करें
      • count := i/3 का भागफल
      • यदि count <= j, तो
        • memo[j, i] := memo[j, i-1] + memo[j, i-2] + memo[j, i-3]
      • अन्यथा,
        • memo[j, i] := memo[j, i-1] + memo[j, i-2] + memo[j-1, i-3]
  • memo[k, n] वापस करें

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

उदाहरण

class Solution:    def solve(self, n, k):       if n==0:          return 1       if n==1:          return 1          k= min(k,n)          memo=[[0]*(n+1) for _ in range(k+1)]          for r in range(k+1):             memo[r][0]=1             memo[r][1]=1             memo[r][2]=2                for i in range(3,n+1):                memo[0][i]=memo[0][i-1]+memo[0][i-2]                for j in range(1,k+1):                   for i in range(3,n+1):                      count = i//3                      if count<=j:                         memo[j][i]=memo[j][i-1]+memo[j][i-2]+memo[j][i-3]                      else:                         memo[j][i]=memo[j][i-1]+memo[j][i-2]+memo[j-1][i-3]          return memo[k][n] ob = Solution() print(ob.solve(n = 5, k = 2))

इनपुट

5, 2

आउटपुट

13

  1. কতগুলো কিউব কাটা হবে সেটা বের করার প্রোগ্রাম

  2. পাইথনে ম্যাট্রিক্সের খালি সেল N টি বেছে নেওয়ার কতভাবে আছে তা চেক করার প্রোগ্রাম

  3. পাইথনে বৃষ্টির পানি কতটুকু জমা রাখা যায় তা খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে ট্রিকে দুটি ট্রিতে ভাগ করার পদ্ধতির সংখ্যা খুঁজে বের করার প্রোগ্রাম