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