एक संख्या 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