একটি সংখ্যা দেওয়া থাকলে, সর্বোচ্চ একবার দুটি অঙ্ক স্ব্যাপ করে তার চেয়ে বড় সবচেয়ে ছোট সংখ্যা বের করতে হবে। না পারলে -১।
উদাহরণ
ইনপুট: 12345 → আউটপুট: 12354 (৪ ও ৫ স্ব্যাপ)
অ্যালগরিদম
- ডান পাশ থেকে বামে স্ক্যান করে প্রথমটি খুঁজুন যেটি তার ডান পাশের চেয়ে ছোট।
- সেটি স্ব্যাপ করুন ডান পাশের সবচেয়ে ছোট বড় অঙ্কের সাথে।
- যদি অঙ্কগুলো নিরবক্রভাবে ছোট হয় (যেমন 54321), তবে -১ ফেরত দিন।
সি++ ইমপ্লিমেন্টেশন
#include <bits/stdc++.h>
using namespace std;
string getNextHigherNumber(string num) {
int len = num.size();
int firstIdx = -1;
for (int i = len - 2; i >= 0; i--) {
if (num[i] < num[len - 1]) { firstIdx = i; break; }
}
if (firstIdx == -1) return "-1";
int secondIdx = -1;
for (int i = len - 1; i > firstIdx; i--) {
if (num[i] > num[firstIdx] && (secondIdx == -1 || num[i] <= num[secondIdx])) {
secondIdx = i;
}
}
swap(num[firstIdx], num[secondIdx]);
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