কম্পিউটার

C++ এ একঘেয়ে সংখ্যা বৃদ্ধি করছে


ধরুন আমাদের একটি অ-ঋণাত্মক পূর্ণসংখ্যা N আছে, আমাদেরকে একঘেয়ে ক্রমবর্ধমান সংখ্যা সহ N-এর থেকে কম বা সমান বৃহত্তম সংখ্যাটি খুঁজে বের করতে হবে। আমরা জানি যে একটি পূর্ণসংখ্যার একঘেয়ে সংখ্যা বৃদ্ধি পায় যদি এবং শুধুমাত্র যদি প্রতিটি জোড়া সন্নিহিত সংখ্যার x এবং y সন্তুষ্ট করে x <=y।) তাই যদি ইনপুটটি 332 এর মত হয়, তাহলে ফলাফল 299 হবে।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • s :=স্ট্রিং হিসাবে N, i :=1, n :=s এর আকার
  • যখন i =s[i – 1]
    • i 1 দ্বারা বাড়ান
  • যদি আমি
  • যখন i> 0 এবং s[i – 1]> s[i], তারপর
    • i 1 দ্বারা হ্রাস করুন
    • s[i] 1 দ্বারা কমিয়ে দিন
i + 1 থেকে n
    পরিসরে j-এর জন্য
  • s[j] :='9'
  • সংখ্যা হিসাবে s ফেরত দিন
  • আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

    উদাহরণ

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int monotoneIncreasingDigits(int N) {
          string s = to_string(N);
          int i = 1;
          int n = s.size();
          while(i < n && s[i] >= s[i - 1]) i++;
          if( i < n)
          while(i > 0 && s[i - 1] > s[i]){
             i--;
             s[i]--;
          }
          for(int j = i + 1; j < n; j++)s[j] = '9';
          return stoi(s);
       }
    };
    main(){
       Solution ob;
       cout << (ob.monotoneIncreasingDigits(332));
    }

    ইনপুট

    332

    আউটপুট

    299

    1. C++ এ ক্রমবর্ধমান ক্রমে কার্ড প্রকাশ করুন

    2. C++ এ ক্রমবর্ধমান মনোটোনে স্ট্রিং ফ্লিপ করুন

    3. C++ প্রোগ্রামে K ডিজিটস সরান

    4. C++-এ K ডিজিটগুলি সরান