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