मान लीजिए कि हमारे पास एक संख्या n है, हमें अगला निकटतम मान ज्ञात करना है जहाँ सभी अंक विषम हैं। जब n के सबसे करीब होने के लिए दो मान बंधे हों, तो बड़ा मान लौटाएं।
इसलिए, यदि इनपुट n =243 जैसा है, तो आउटपुट 199 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- प्रथम_सम:=-1
- s :=n स्ट्रिंग के रूप में
- l :=s का आकार
- मैं के लिए 0 से l की सीमा में, करते हैं
- यदि s[i] सम है, तो
- प्रथम_सम:=मैं
- लूप से बाहर आएं
- यदि s[i] सम है, तो
- यदि first_even -1 के समान है, तो
- वापसी n
- बड़ा :=1 + s का सांख्यिक मान [सूचकांक 0 से i तक]
- यदि s[i] "0" के समान है, तो
- यदि s[i - 1] "1" के समान है, तो
- छोटा :=s का सांख्यिक मान [सूचकांक 0 से i तक] - 1
- अन्यथा,
- छोटा:=s का सांख्यिक मान [सूचकांक 0 से i तक] - 11
- यदि s[i - 1] "1" के समान है, तो
- अन्यथा,
- छोटा :=s का सांख्यिक मान [सूचकांक 0 से i तक] - 1
- i के लिए i + 1 से l की श्रेणी में, करें
- बड़ा:=बड़ा संयोजन "1"
- छोटा:=छोटा संयोजन "9"
- बड़ा:=बड़े का अंकीय मान, छोटा:=छोटा का अंकीय मान
- d2 :=बड़ा - n, d1 :=n - छोटा
- यदि d1
- छोटा लौटें
- बड़ा रिटर्न
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, n): first_even = -1 s = str(n) l = len(s) for i in range(l): if int(s[i]) % 2 == 0: first_even = i break if first_even == -1: return n big = str(int(s[: i + 1]) + 1) if s[i] == "0": if s[i - 1] == "1": small = str(int(s[: i + 1]) - 1) else: small = str(int(s[i : i + 1]) - 11) else: small = str(int(s[: i + 1]) - 1) for i in range(i + 1, l): big += "1" small += "9" big, small = int(big), int(small) d2 = big - n d1 = n - small if d1 < d2: return small elif d1 >= d2: return big ob = Solution() n = 243 print(ob.solve(n))
इनपुट
243
आउटपुट
199