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