কম্পিউটার

C++ এ একটি সংখ্যার পরবর্তী পূর্ণসংখ্যার স্থানান্তর পেতে প্রোগ্রাম


ধরুন আমাদের একটি সংখ্যা n আছে, আমাদের তার অঙ্কগুলির পরবর্তী বড় স্থানান্তর খুঁজে বের করতে হবে। যখন n ইতিমধ্যেই তার বৃহত্তম পারমুটেশনে থাকে, তখন এটিকে সবচেয়ে ছোট পারমুটেশনে ঘোরান৷

সুতরাং, যদি ইনপুট n =319 এর মত হয়, তাহলে আউটপুট হবে 391।

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

  • একটি ফাংশন makeArray() সংজ্ঞায়িত করুন, এটি x,

    লাগবে
  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • যখন x অ-শূন্য, কর −

    • ret এর শেষে x mod 10 সন্নিবেশ করুন

    • x :=x / 10

  • অ্যারে রিভার্স করুন

  • রিটার্ন রিটার্ন

  • একটি ফাংশন সংজ্ঞায়িত করুন (), এটি একটি অ্যারে v,

    নেবে
  • ret :=0

  • প্রতিটি উপাদানের জন্য আমি v

    • ret :=ret * 10

    • ret :=ret + i

  • রিটার্ন রিটার্ন

  • একটি ফাংশন getIndex() সংজ্ঞায়িত করুন, এটি একটি অ্যারে v,

    নেবে
  • ret :=-1

  • আরম্ভ করার জন্য i :=v এর আকার, যখন i>=1, আপডেট করুন (i 1 দ্বারা কম করুন), −

    • যদি v[i]> v[i - 1], তাহলে −

      • ret :=i

      • লুপ থেকে বেরিয়ে আসুন

  • যদি ret -1 এর সমান না হয়, তাহলে −

    • x :=v[ret - 1]

    • idx :=ret

    • j আরম্ভ করার জন্য :=ret + 1, যখন j

      • যদি v[j] x হয়, তাহলে −

        • idx :=j

    • বিনিময় v[ret - 1] এবং v[idx]

  • রিটার্ন রিটার্ন

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • একটি অ্যারে সংজ্ঞায়িত করুন v :=makeArray(num)

  • idx :=getIndex(v)

  • যদি idx -1 এর মত হয়, তাহলে −

    • অ্যারে সাজান v

  • অন্যথায়

    • অ্যারে সাজান v

  • রিটার্ন কম্বাইন(v)

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   vector<int> makeArray(int x) {
      vector<int> ret;
      while (x) {
         ret.push_back(x % 10);
         x /= 10;
      }
      reverse(ret.begin(), ret.end());
      return ret;
   }
   int combine(vector<int>& v) {
      int ret = 0;
      for (int i : v) {
         ret *= 10;
         ret += i;
      }
      return ret;
   }
   int getIndex(vector& v) {
      int ret = -1;
      for (int i = v.size() - 1; i >= 1; i--) {
         if (v[i] > v[i - 1]) {
            ret = i;
            break;
         }
      }
      if (ret != -1) {
         int x = v[ret - 1];
         int idx = ret;
         for (int j = ret + 1; j < v.size(); j++) {
            if (v[j] < v[idx] && v[j] > x) {
               idx = j;
            }
         }
         swap(v[ret - 1], v[idx]);
      }
      return ret;
   }
   int solve(int num) {
      vector<int> v = makeArray(num);
      int idx = getIndex(v);
      if(idx == -1) {
         sort(v.begin(), v.end());
      }
      else {
         sort(v.begin() + idx, v.end());
      }
      return combine(v);
   }
};
int solve(int n) {
   return (new Solution())->solve(n);
}
int main(){
   int n = 319;
   cout << solve(n);
}

ইনপুট

319

আউটপুট

391

  1. এলোমেলো সংখ্যা তৈরি করতে C++ প্রোগ্রাম

  2. আর্মস্ট্রং নম্বর চেক করতে C++ প্রোগ্রাম

  3. একটি সংখ্যার শক্তি গণনা করার জন্য C++ প্রোগ্রাম

  4. C++ প্রোগ্রাম একটি নম্বর বিপরীত করতে