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

Python में दो दी गई लंबाई की छलांग लगाकर संख्या तक पहुंचने की संभावना की जांच कैसे करें?

मान लीजिए हम शुरुआती स्थिति p पर हैं, हम किसी भी दिशा (बाएं या दाएं) में d1 और d2 यूनिट कूद सकते हैं। हमें p से कूदकर स्थिति q तक पहुंचने के लिए आवश्यक न्यूनतम चरणों की संख्या ढूंढनी है।

तो, यदि इनपुट p = 5, q = 10, d1 = 4, d2 = 3 है, तो आउटपुट 3 होगा क्योंकि हम दूरी 4 का उपयोग करके दो बार दाएं कूद सकते हैं फिर हम स्थान 13 पर पहुंच सकते हैं, फिर 3 यूनिट बाएं कूदकर 10 पर पहुंच सकते हैं।

हल करने के चरण

  • gcd_res := d1 और d2 का gcd
  • यदि (p - q), gcd_res से विभाज्य नहीं है, तो:
    • -1 लौटाएं
  • que := एक डबल एंडेड क्यू परिभाषित करें
  • visited := एक नया सेट
  • क्यू में (p, 0) जोड़ी डालें
  • p को विज़िटेड के रूप में चिह्नित करें
  • जब तक que का आकार > 0 है, तब तक:
    • (point, step) := क्यू का फ्रंट एलिमेंट और इसे que से हटाएं
    • यदि point, q के समान है, तो:
      • step लौटाएं
    • यदि point + d1 विज़िटेड नहीं है, तो:
      • que में (point + d1, step + 1) जोड़ी डालें
      • (point + d1) को विज़िटेड के रूप में चिह्नित करें
    • यदि point + d2 विज़िटेड में नहीं है, तो:
      • que में (point + d2, step + 1) जोड़ी डालें
      • (point + d2) को विज़िटेड के रूप में चिह्नित करें
    • यदि point - d1 विज़िटेड में नहीं है, तो:
      • que में (point - d1, step + 1) जोड़ी डालें
      • (point - d1) को विज़िटेड के रूप में चिह्नित करें
    • यदि point - d2 विज़िटेड में नहीं है, तो:
      • que में (point - d2, step + 1) जोड़ी डालें
      • (point - d2) को विज़िटेड के रूप में चिह्नित करें

उदाहरण

from math import gcd
from collections import deque

def solve(p, d1, d2, q):
    gcd_res = gcd(d1, d2)
    if (p - q) % gcd_res != 0:
        return -1
    que = deque()
    visited = set()
    que.appendleft([p, 0])
    visited.add(p)
    while len(que) > 0:
        pair = que.pop()
        point, step = pair[0], pair[1]
        if point == q:
            return step
        if point + d1 not in visited:
            que.appendleft([(point + d1), step + 1])
            visited.add(point + d1)
        if point + d2 not in visited:
            que.appendleft([(point + d2), step + 1])
            visited.add(point + d2)
        if point - d1 not in visited:
            que.appendleft([(point - d1), step + 1])
            visited.add(point - d1)
        if point - d2 not in visited:
            que.appendleft([(point - d2), step + 1])
            visited.add(point - d2)

p = 5
q = 10
d1 = 4
d2 = 3
print(solve(p, d1, d2, q))

इनपुट

5, 4, 3, 10

आउटपुट

True
  1. Python में वेक्टर A को घुमाकर और वेक्टर C जोड़कर वेक्टर B तक पहुंचने की संभावना की जांच कैसे करें? Python में वेक्टर A को घुमाकर और वेक्टर C जोड़कर वेक्टर B तक पहुंचने की संभावना की जांच कैसे करें?

    मान लीजिए हमारे पास 2D प्लेन में तीन वेक्टर x, y और z हैं। हमें यह जांचना है कि क्या हम वेक्टर x को 90 डिग्री (घड़ी की दिशा में) घुमाकर या आवश्यकतानुसार कई बार z को जोड़कर वेक्टर y प्राप्त कर सकते हैं। तो, यदि इनपुट x = (-4, -2), y = (-1, 2), z = (-2, -1) है, तो आउटपुट True होगा क्योंकि हम x में z

  1. पायथन प्रोग्राम में कैसे जांचें कि दी गई संख्या फाइबोनैचि नंबर है या नहीं? पायथन प्रोग्राम में कैसे जांचें कि दी गई संख्या फाइबोनैचि नंबर है या नहीं?

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट एक संख्या n दिए जाने पर, जांचें कि n फाइबोनैचि नंबर है या नहीं। हम सभी जानते हैं कि nth फाइबोनैचि नंबर पिछले दो फाइबोनैचि नंबर्स का योग होता है। लेकिन वे पुनरावृत्ति संबंध के अलावा एक दिलचस्प संबंध भी प

  1. पायथन प्रोग्राम: जांचें कि दी गई संख्या फाइबोनैचि संख्या है या नहीं पायथन प्रोग्राम: जांचें कि दी गई संख्या फाइबोनैचि संख्या है या नहीं

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे -समस्या कथनएक संख्या n दी गई है, जांचें कि क्या n एक फाइबोनैचि संख्या है या नहींहम सभी जानते हैं कि nth फाइबोनैचि संख्या पिछली दो फाइबोनैचि संख्याओं का योग है। लेकिन वे पुनरावृत्ति संबंध के अलावा एक दिलचस्प संबंध भी प्रदान करते हैं।