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

पायथन में जांचें कि अमल स्टोन गेम जीत सकता है या नहीं


मान लीजिए दो खिलाड़ी अमल और बिमल हैं, वे एक खेल खेल रहे हैं, और अमल पहले शुरू करता है। प्रारंभ में, एक ढेर में n अलग-अलग पत्थर हैं। प्रत्येक खिलाड़ी की बारी पर, वह ढेर से कोई भी वर्ग संख्या (शून्येतर) पत्थर हटाने की चाल चलता है। साथ ही, यदि एक खिलाड़ी चाल चलने में असमर्थ है, तो वह खेल हार जाता है। इसलिए यदि हमारे पास n है, तो हमें जांचना है कि अमल खेल जीत सकता है या नहीं।

इसलिए, यदि इनपुट है n = 21, तो आउटपुट True होगा क्योंकि पहले अमल 16 ले सकता है, फिर बिमल 4 लेता है, फिर अमल 1 लेता है और खेल जीतता है।

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

  • squares := एक नई सूची

  • square := 1

  • increase := 3

  • जब तक square <= n, करें

    • square को squares के अंत में डालें

    • square := square + increase

    • increase := increase + 2

  • square को squares के अंत में डालें

  • dp := (n + 1) आकार की एक खाली सूची

  • dp[0] := False

  • k को 1 से n तक के लिए, करें

    • s := 0

    • dp[k] := False

    • जब तक squares[s] <= k और dp[k] खाली है, करें

      • यदि dp[k - squares[s]] खाली है, तो

        • dp[k] := True

      • s := s + 1

  • dp का अंतिम तत्व वापस करें

उदाहरण

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

def solve(n):
    squares = []
    square = 1
    increase = 3
    while square <= n:
        squares.append(square)
        square += increase
        increase += 2
    squares.append(square)
    dp = [None] * (n + 1)
    dp[0] = False
    for k in range(1, n + 1):
        s = 0
        dp[k] = False
        while squares[s] <= k and not dp[k]:
            if not dp[k - squares[s]]:
                dp[k] = True
            s += 1
    return dp[-1]

n = 21
print(solve(n))

इनपुट

21

आउटपुट

True
  1. Python में दो ट्री नोड्स को स्वैप करके बनाए जा सकते हैं या नहीं, इसकी जांच करने का प्रोग्राम Python में दो ट्री नोड्स को स्वैप करके बनाए जा सकते हैं या नहीं, इसकी जांच करने का प्रोग्राम

    मान लीजिए हमारे पास दो ट्री हैं, हमें यह जांचना है कि क्या हम पहले ट्री को दूसरे में किसी भी नोड के बाएं और दाएं सबट्री को कितनी भी बार स्वैप करके बदल सकते हैं। तो, यदि इनपुट इस तरह है तो आउटपुट True होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे: que1 := root0 के साथ प्रारंभ एक कतार que2

  1. पायथन में जांचें कि दिया गया ग्राफ द्विभाजित है या नहीं पायथन में जांचें कि दिया गया ग्राफ द्विभाजित है या नहीं

    मान लीजिए हमारे पास एक अविकल्पित ग्राफ है, हमें जांचना है कि ग्राफ द्विभाजित है या नहीं। जैसा कि हम जानते हैं, एक ग्राफ द्विभाजित होता है जब हम ग्राफ के नोड्स को दो सेट A और B में विभाजित कर सकते हैं ताकि ग्राफ में प्रत्येक किनारा {u,v} का एक नोड u A में और दूसरा नोड v B में हो। उदाहरण के लिए, यदि

  1. - सूची खाली है या नहीं जांचने का पायथन प्रोग्राम

    समस्या विवरण एक खाली सूची दी गई है। हमारा कार्य जांचना है कि यह सूची खाली है या नहीं। यहां हम जांचने का एक निहित तरीका उपयोग करते हैं। एल्गोरिदम हम एक खाली सूची लेते हैं। फिर जांचें कि यदि सूची खाली है तो 1 लौटाएं अन्यथा 0। उदाहरण कोड # खाली सूची की जांच के लिए पायथन कोड def checklist(A): if