इस समस्या में, हमें एक तत्व N दिया जाता है। हमें समान अंकों के समुच्चय के साथ अगली बड़ी संख्या ढूंढनी है। हमें N से बड़ी सबसे छोटी संख्या ढूंढनी है जिसमें समान अंक हों।
आइए एक उदाहरण से समस्या को समझते हैं,
इनपुट
N = "92534"
आउटपुट
92543
समाधान दृष्टिकोण
अगला बड़ा तत्व ढूंढने की समस्या का एक सरल समाधान निम्नलिखित दृष्टिकोण द्वारा है –
संख्या को कम से कम महत्वपूर्ण बिट से सबसे महत्वपूर्ण बिट तक पार करें। और तब रुकें जब वर्तमान तत्व पिछले तत्व से छोटा हो।
इसके बाद शेष सरणी में सबसे छोटे तत्व को खोजें। और सबसे छोटी संख्या ढूंढें और इसे संख्या के साथ स्वैप करें।
फिर शेष उपसरणी को सॉर्ट करें और आउटपुट वापस करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#include <iostream> #include <cstring> #include <algorithm> using namespace std; void findNextGreater(char number[], int n) { int i, j; for (i = n-1; i > 0; i--) if (number[i] > number[i-1]) break; if (i==0) { cout<<"Next number is not possible"; return; } int x = number[i-1], smallest = i; for (j = i+1; j < n; j++) if (number[j] > x && number[j] < number[smallest]) smallest = j; char temp = number[smallest]; number[smallest] = number[i-1]; number[i-1] = temp; sort(number + i, number + n); cout<<number; return; } int main(){ char number[] = "92534"; int n = strlen(number); cout<<"The next number with same set of digits is "; findNextGreater(number, n); return 0; }आउटपुट
The next number with same set of digits is 92543