इस समस्या में, हमें एक तत्व 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