কম্পিউটার

C++ এ সর্বাধিক একটি সোয়াপ অপারেশন ব্যবহার করে পরবর্তী উচ্চতর সংখ্যা


একটি সংখ্যা n দেওয়া হয়েছে, সংখ্যাটির যেকোনো দুটি সংখ্যা অদলবদল করুন যাতে ফলাফল সংখ্যাটি n সংখ্যার চেয়ে বড় হয়। যদি এটি সম্ভব না হয় তবে প্রিন্ট করুন -1। আসুন একটি উদাহরণ দেখি।

ইনপুট

12345

আউটপুট

12354

আমরা 4 এবং 5 সংখ্যাগুলি অদলবদল করেছি৷ এবং আমরা একটি অদলবদল করে উচ্চতর নম্বর পেয়েছি৷

অ্যালগরিদম

  • সংখ্যার সংখ্যা কমতে থাকলে সংখ্যাটি গঠন করা সম্ভব নয়।

  • সংখ্যার ডান দিক থেকে অঙ্কের সূচী খুঁজুন যা শেষ সংখ্যার চেয়ে কম।

  • অঙ্কের সূচী খুঁজুন যা পূর্ববর্তী অঙ্কের চেয়ে বড় এবং সমস্ত সংখ্যার চেয়ে কম৷

  • দুটি সংখ্যা অদলবদল করুন এবং নতুন নম্বর ফেরত দিন।

  • নতুন নম্বরটি ফেরত দিন।

বাস্তবায়ন

C++

-এ উপরের অ্যালগরিদমের বাস্তবায়ন নিচে দেওয়া হল
#include <bits/stdc++.h>
using namespace std;
string getNextHigherNumber(string num) {
   int len = num.size();
   int firstDigitIndex = -1;
   for (int i = len - 2; i >= 0; i--) {
      if (num[i] < num[len - 1]) {
         firstDigitIndex = i;
         break;
      }
   }
   if (firstDigitIndex == -1) {
      return "-1";
   }
   int secondDigitIndex = -1;
   for (int i = len - 1; i > firstDigitIndex; i--) {
   if (num[i] > num[firstDigitIndex]) {
      if (secondDigitIndex == -1 || num[i] <= num[secondDigitIndex]) {
         secondDigitIndex = i;
         }
      }
   }
   char temp = num[firstDigitIndex];
   num[firstDigitIndex] = num[secondDigitIndex];
   num[secondDigitIndex] = temp;
   return num;
}

int main() {
   string num = "12345";
   cout << "Given number: " << num << endl;
   cout << "Next higher number: " << getNextHigherNumber(num) << endl;
   return 0;
}

আউটপুট

আপনি যদি উপরের কোডটি চালান, তাহলে আপনি নিম্নলিখিত ফলাফল পাবেন।

Given number: 12345
Next higher number: 12354

  1. C++ এ কুৎসিত সংখ্যা

  2. C++ এ পরবর্তী সংখ্যার বাইনারি উপস্থাপনা

  3. C++ ব্যবহার করে অক্ষের একপাশে অবশিষ্ট পয়েন্ট পেতে ন্যূনতম সংখ্যক পয়েন্ট সরাতে হবে।

  4. C++ এ একজনের পূর্ণসংখ্যার পরিপূরক খুঁজুন