मान लीजिए कि हमारे पास दो संख्याएँ A और B हैं, हमें न्यूनतम धनात्मक संख्या M ज्ञात करनी है ताकि M, A से विभाज्य हो और M के अंकों का योग B के समान हो। इसलिए, यदि ऐसा कोई परिणाम नहीं है, तो वापस लौटें - 1.
इसलिए, यदि इनपुट ए =50, बी =2 जैसा है, तो आउटपुट 200 होगा क्योंकि यह 50 से विभाज्य है और इसके अंकों का योग =2 + 0 + 0 =2 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक तत्व प्रकार के कंटेनर को परिभाषित करें, जिसमें दो नंबर ए और बी और एक स्ट्रिंग हो
-
que :=एक नई सूची
-
elem :=एक नया तत्व (0, 0, रिक्त स्ट्रिंग) के साथ
-
विज़िट किया गया[0, 0] :=1
-
कतार के अंत में elem डालें
-
जबकि क्यू का आकार> 0, करें
-
temp_elem :=que से पहले एलीमेंट को डिलीट करें
-
अगर temp_elem.a 0 है और temp_elem.b b है, तो
-
temp_elem.string का पूर्णांक लौटाएं
-
-
मेरे लिए 0 से 9 की सीमा में, करें
-
x :=(temp_elem.a * 10 + i) mod a
-
y:=temp_elem.b + i
-
अगर y <=b और विज़िट किया गया [x, y] गलत है, तो
-
विज़िट किया गया[x, y] :=1
-
x, y और temp_elem.string के साथ नया तत्व सम्मिलित करें i inque को संयोजित करें
-
-
-
-
वापसी -1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
visited = [[0 for x in range(501)] for y in range(5001)] class Element: def __init__(self, a, b, string): self.a = a self.b = b self.string = string def get_number(a, b): que = [] elem = Element(0, 0, "") visited[0][0] = 1 que.append(elem) while len(que) > 0: temp_elem = que.pop(0) if temp_elem.a == 0 and temp_elem.b == b: return int(temp_elem.string) for i in range(0, 10): x = (temp_elem.a * 10 + i) % a y = temp_elem.b + i if y <= b and visited[x][y] == False: visited[x][y] = 1 que.append(Element(x, y, temp_elem.string + str(i))) return -1 a, b = 50, 2 print(get_number(a, b))
इनपुट
50, 2
आउटपुट
200