Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में सीढ़ियाँ चढ़ने के कितने तरीके हैं (अधिकतम k बार में अधिकतम कदम) खोजने के लिए कार्यक्रम

मान लीजिए कि हमारे पास 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
  • ज्ञापन:=आकार का एक मैट्रिक्स (n+1) x (k+1)
  • r के लिए 0 से k की सीमा में, करें
    • मेमो[आर, 0]:=1, मेमो[आर, 1]:=1, मेमो[आर, 2]:=2
  • 3 से n की श्रेणी में i के लिए, करें
    • ज्ञापन[0, i]:=ज्ञापन[0, i-1] + ज्ञापन[0, i-2]
  • जे के लिए 1 से के रेंज में, करें
    • 3 से n की श्रेणी में i के लिए, करें
      • गिनती :=i/3 का भागफल
      • अगर गिनती <=j, तो
        • मेमो[j, i]:=मेमो[j, i-1] + मेमो[j, i-2] + मेमो[j, i-3]
      • अन्यथा,
        • मेमो[j, i]:=मेमो[j, i-1] + मेमो[j, i-2] + मेमो[j-1, i-3]
  • रिटर्न मेमो[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. यह जांचने के लिए कार्यक्रम कि हम कितने तरीकों से अजगर में एक मैट्रिक्स की खाली कोशिकाओं को चुन सकते हैं

    मान लीजिए कि हमारे पास एक एन एक्स एन बाइनरी मैट्रिक्स है जहां 0 खाली कोशिकाओं के लिए है और 1 एक अवरुद्ध सेल है, हमें एन खाली कोशिकाओं को चुनने के तरीकों की संख्या का पता लगाना होगा जैसे कि प्रत्येक पंक्ति और प्रत्येक कॉलम में कम से कम एक चुना हुआ सेल हो। यदि उत्तर बहुत बड़ा है तो वापसी परिणाम मॉड 10

  1. प्रोग्राम यह पता लगाने के लिए कि हम पायथन में कुल कितनी बारिश पकड़ सकते हैं

    मान लीजिए कि हमारे पास n गैर-ऋणात्मक पूर्णांकों की एक सरणी है। ये उस ऊंचाई का प्रतिनिधित्व कर रहे हैं जहां प्रत्येक बार की चौड़ाई 1 है, हमें गणना करनी होगी कि बारिश के बाद यह कितना पानी पकड़ने में सक्षम है। तो नक्शा इस तरह होगा - यहां हम देख सकते हैं कि 8 नीले बॉक्स हैं, इसलिए आउटपुट 8 होगा। इसे

  1. पायथन में हम पेड़ को दो पेड़ों में कितने तरीकों से विभाजित कर सकते हैं, यह गिनने का कार्यक्रम

    मान लीजिए कि हमारे पास 0, 1 और 2 मान वाले बाइनरी ट्री हैं। रूट में कम से कम एक 0 नोड और एक 1 नोड है। अब मान लीजिए कि एक ऑपरेशन है जहां हम पेड़ में एक किनारे को हटाते हैं और पेड़ दो अलग-अलग पेड़ बन जाते हैं। हमें एक किनारे को हटाने के कई तरीके खोजने होंगे जैसे कि दो पेड़ों में से किसी में भी 0 नोड और