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

पायथन में पहले n प्राकृतिक संख्याओं के क्रमचय से मैजिक सेट की संख्या खोजने का प्रोग्राम


मान लीजिए हमारे पास पहले n प्राकृतिक संख्याओं वाली एक सरणी A है, और सरणी A का एक क्रमचय P{p1, p2, ... pn} है। हमें जांचना है कि कितने मैजिक सेट हैं। एक क्रमचय को मैजिक सेट कहा जाता है, यदि यह इन कुछ नियमों को पूरा करता है:

  • यदि हमारे पास k है, तो स्थितियों a[1], a[2], ... a[k] में तत्व अपने आसन्न तत्वों से कम हैं [P[a[i] - 1] > P[a[i]] < P[a[i] + 1]]
  • यदि हमारे पास l है, तो स्थितियों b[1], b[2], ... b[l] में तत्व अपने आसन्न तत्वों से अधिक हैं [P[b[i] - 1] < P[b[i]] > P[b[i] + 1]]

तो, यदि इनपुट n = 4, k = 1, l = 1, k_vals = [2], l_vals = [3] है, तो आउटपुट 5 होगा क्योंकि: N = 4, a[1] = 2 और b[1] = 3। तो पांच क्रमचय हैं [2,1,4,3], [3,2,4,1], [4,2,3,1], [3,1,4,2], [4,1,3,2]।

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

  • p := 10^9+7
  • F := आकार n+2 की एक सरणी जिसे 0 से भरा गया है
  • k_vals में प्रत्येक a के लिए, करें
    • यदि F[a - 1], 1 है या F[a + 1], 1 है, तो
      • यदि F[a - 1], 1 है या F[a + 1], 1 है, तो
        • p := null
      • F[a] := 1
  • l_vals में प्रत्येक b के लिए, करें
    • यदि F[b], 1 है या F[b - 1], -1 है या F[b + 1], -1 है, तो
      • p := null
    • F[b] := -1
  • यदि p, null के समान है, तो
    • 0 लौटाएं
  • अन्यथा,
    • A := आकार n+1 की एक सरणी जिसे 0 से भरा गया है
    • B := आकार n+1 की एक सरणी जिसे 0 से भरा गया है
    • FF := आकार n+1 की एक सरणी जिसे null से भरा गया है
    • i को 1 से n तक की रेंज में, करें
      • FF[i] := F[i] - F[i - 1]
    • A[1] := 1
    • i को 2 से n तक की रेंज में, करें
      • j को 1 से i तक की रेंज में, करें
        • यदि FF[i] > 0, तो
          • B[j] :=(B[j - 1] + A[j - 1]) mod p
        • अन्यथा जब FF[i] < 0, तो
          • B[j] :=(B[j - 1] + A[i - 1] - A[j - 1]) mod p
        • अन्यथा,
          • B[j] :=(B[j - 1] + A[i - 1]) mod p
      • A और B को स्वैप करें
    • A[n] लौटाएं

उदाहरण

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

def solve(n, k, l, k_vals, l_vals): p = 10**9+7 F = [0] * (n + 2) for a in k_vals: if F[a - 1] == 1 or F[a + 1] == 1: p = None F[a] = 1 for b in l_vals: if F[b] == 1 or F[b - 1] == -1 or F[b + 1] == -1: p = None F[b] = -1 if p == None: return 0 else: A = [0] * (n + 1) B = [0] * (n + 1) FF = [None] * (n + 1) for i in range(1, n + 1): FF[i] = F[i] - F[i - 1] A[1] = 1 for i in range(2, n + 1): for j in range(1, i + 1): if FF[i] > 0: B[j] = (B[j - 1] + A[j - 1]) % p elif FF[i] < 0: B[j] = (B[j - 1] + A[i - 1] - A[j - 1]) % p else: B[j] = (B[j - 1] + A[i - 1]) % p A, B = B, A return A[n] n = 4 k = 1 l = 1 k_vals = [2] l_vals = [3] print(solve(n, k, l, k_vals, l_vals))

इनपुट

4, 1, 1, [2], [3] 

आउटपुट

5

  1. पायथन में पहले से अंतिम नोड तक प्रतिबंधित पथों की संख्या ज्ञात करने का प्रोग्राम पायथन में पहले से अंतिम नोड तक प्रतिबंधित पथों की संख्या ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास एक अनिर्देशित भारित संयुक्त ग्राफ है। ग्राफ में n नोड्स हैं और वे 1 से n तक लेबल किए गए हैं। प्रारंभ से अंत तक एक पथ नोड्स के अनुक्रम की तरह है जैसे [z0, z1, z2, ..., zk] यहां z0 प्रारंभ नोड है और zk अंत नोड है और 0 <= i dist(zi+1) जहां 0 <= i <= k-1। इसलिए, हमें नोड 1 से नोड n

  1. - पायथन प्रोग्राम: पहले n नेचुरल नंबर्स के क्यूब्स का योग

    इस लेख में, हम दिए गए प्रॉब्लम स्टेटमेंट को हल करने के समाधान और दृष्टिकोण के बारे में सीखेंगे। प्रॉब्लम स्टेटमेंट – एक इनपुट n दिए जाने पर, हमें n-th टर्म तक सीरीज़ 1³ + 2³ + 3³ + 4³ + ... + n³ का योग प्रिंट करने की आवश्यकता है। यहां हम प्रॉब्लम स्टेटमेंट के समाधान तक पहुंचने के लिए दो दृष्टिकोणों

  1. - पायथन में रिकर्सन का उपयोग करके प्राकृतिक संख्याओं का योग कैसे खोजें?

    यदि कोई फ़ंक्शन स्वयं को कॉल करता है, तो उसे रिकर्सिव फ़ंक्शन कहा जाता है। इसे अनंत लूप में पड़ने से रोकने के लिए, रिकर्सिव कॉल को कंडीशनल स्टेटमेंट में रखा जाता है। निम्न प्रोग्राम यूज़र से इनपुट के रूप में संख्या स्वीकार करता है और इसे rsum() फ़ंक्शन को आर्गुमेंट के रूप में भेजता है। यह प्रत्येक