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