একটি সংখ্যা 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