ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের পরবর্তী নিকটতম মানটি খুঁজে বের করতে হবে যেখানে সমস্ত সংখ্যা বিজোড়। যখন n-এর কাছাকাছি হওয়ার জন্য দুটি মান বাঁধা থাকে, তখন বড়টি ফেরত দিন।
সুতরাং, যদি ইনপুট n =243 এর মত হয়, তাহলে আউটপুট হবে 199।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- first_even :=-1
- s :=n স্ট্রিং হিসাবে
- l :=s এর আকার
- আমি 0 থেকে l রেঞ্জের জন্য, কর
- যদি s[i] জোড় হয়, তাহলে
- first_even :=i
- লুপ থেকে বেরিয়ে আসুন
- যদি s[i] জোড় হয়, তাহলে
- যদি first_even হয় -1 এর মত, তাহলে
- রিটার্ন n
- বড় :=1 + s এর সাংখ্যিক মান [সূচক 0 থেকে i]
- যদি s[i] "0" এর মত হয়, তাহলে
- যদি s[i - 1] "1" এর মত হয়, তাহলে
- small :=s এর সাংখ্যিক মান [সূচী 0 থেকে i] - 1
- অন্যথায়,
- small :=s এর সাংখ্যিক মান [সূচী 0 থেকে i] - 11
- যদি s[i - 1] "1" এর মত হয়, তাহলে
- অন্যথায়,
- small :=s এর সাংখ্যিক মান [সূচী 0 থেকে i] - 1
- i + 1 থেকে l রেঞ্জের জন্য, করুন
- বিগ :=বড় কনক্যাটেনেট "1"
- small :=small concatenate "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