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

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

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

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

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

  • gcd_res :=d1 और d2 का gcd
  • यदि (p - q) gcd_res से विभाज्य नहीं है, तो
    • वापसी -1
  • que :=एक डबल एंडेड कतार परिभाषित करें
  • विज़िट किया :=एक नया सेट
  • एक जोड़ी (p, 0) को कतार में सम्मिलित करें
  • पी को विज़िट किया गया के रूप में चिह्नित करें
  • जबकि क्यू का आकार> 0 गैर-शून्य है, करें
    • (बिंदु, चरण) :=कतार का अगला तत्व और इसे कतार से हटा दें
    • यदि बिंदु q के समान है, तो
      • वापसी का चरण
    • यदि बिंदु + d1 का दौरा नहीं किया जाता है, तो
      • क्यू में एक जोड़ी (बिंदु + d1, चरण + 1) डालें
      • देखे गए के रूप में चिह्नित करें (बिंदु + d1)
    • यदि बिंदु + d2 का दौरा नहीं किया गया है तो गैर-शून्य है, तो
      • क्यू में एक जोड़ी (बिंदु + d2, चरण + 1) डालें
      • देखे गए के रूप में चिह्नित करें (बिंदु + d2)
    • यदि बिंदु - d1 नहीं देखा गया है तो गैर-शून्य है, तो
      • क्यू में एक जोड़ी (बिंदु - d1, चरण + 1) डालें
      • देखे गए के रूप में चिह्नित करें (बिंदु - d1)
    • यदि बिंदु - d2 नहीं देखा गया है तो गैर-शून्य है, तो
      • क्यू में एक जोड़ी (बिंदु - d2, चरण + 1) डालें
      • देखे गए के रूप में चिह्नित करें (बिंदु - 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. जांचें कि क्या वेक्टर ए को घुमाकर और वेक्टर सी को पायथन में जोड़कर वेक्टर बी तक पहुंचना संभव है

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

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

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

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

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