কম্পিউটার টিউটোরিয়াল

পাইথনে n-এর চেয়ে ছোট বা সমান এমন সংখ্যা যেখানে সব ডিজিট নন-ডিক্রিজিং أور্ডারে


মান লক্ষ্য করুন আমাদের কাছে একটি সংখ্যা n আছে। আমাদের কাজ হল n-এর চেয়ে ছোট বা সমান এমন সবচেয়ে বড় সংখ্যা খুঁজে বের করা যাতে তার সব ডিজিট নন-ডিক্রিজিং অর্ডারে থাকে (অর্থাৎ প্রতিটি ডিজিট তার আগের ডিজিটের চেয়ে ছোট নয়)।

উদাহরণস্বরূপ, যদি ইনপুট হয় n = 221, তবে আউটপুট হবে 199।

সমাধানের ধাপসমূহ:
  • digits := n-র সব ডিজিট দিয়ে একটি তালিকা
  • bound := null
  • i কে len(digits)-1 থেকে ০ পর্যন্ত লুপ চালান:
    • যদি digits[i] < digits[i-1] হয়, তবে:
      • bound := i
      • digits[i-1] := digits[i-1] - 1
    • যদি bound নাল না হয়, তবে:
      • i কে bound থেকে len(digits) পর্যন্ত লুপ চালান:
        • digits[i] := 9
  • digits-এর সব ডিজিট জয়েন করে একটি সংখ্যা বানিয়ে রিটার্ন করুন।
উদাহরণ কোড
class Solution:
    def solve(self, n):
        digits = [int(x) for x in str(n)]
        bound = None
        for i in range(len(digits) - 1, 0, -1):
            if digits[i] < digits[i - 1]:
                bound = i
                digits[i - 1] -= 1
        if bound:
            for i in range(bound, len(digits)):
                digits[i] = 9
        return int("".join(map(str, digits)))

ob = Solution()
n = 221
print(ob.solve(n))
ইনপুট
221
আউটপুট
199
  1. পাইথনে দিয়ে गये সংখ্যার সব ডিজিটের যোগফল বের করার প্রোগ্রাম

  2. পাইথন প্রোগ্রাম: একটি সংখ্যার সব অঙ্ক সেটি বিভাজ্য কিনা যাচাই করা

  3. পাইথনে চেক করা: লিস্টের সব মান কি একটি দिये गये ভ্যালুর চেয়ে বড়?

  4. পাইথন প্রোগ্রাম: লিস্টের সব মান দেওয়া মান থেকে বড় কিনা চেক করা