इस समस्या में, हमें एक स्ट्रिंग N दिया जाता है जो एक संख्या का प्रतिनिधित्व करता है। हमारा काम अंकों के समान सेट के साथ N से छोटी सबसे बड़ी संख्या को ढूंढना है।
समस्या का विवरण: हमें दी गई संख्या के सभी अंकों का उपयोग करके एक संख्या ज्ञात करनी है जो N से सबसे बड़ी छोटी संख्या है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: एन ="54314"
आउटपुट: 54341
समाधान दृष्टिकोण
समस्या का एक सरल समाधान उस संख्या का अंक ज्ञात करना है जिसे सबसे बड़ी छोटी संख्या खोजने के लिए स्थानांतरित किया जा सकता है। अब, उद्देश्य को हल करने के लिए संख्या अपनी सही सफलता से अधिक होनी चाहिए।
इसके लिए हम संख्या प्रपत्र को दाएं से बाएं पार करेंगे और अंतिम तत्वों से बड़ा तत्व पाएंगे।
फिर सही उपसरणी में सबसे बड़ा तत्व ढूंढें, और इसे वर्तमान तत्व से बदलें। सॉर्ट के बाद सबरे एक अवरोही क्रम है। यह आपका सबसे बड़ा छोटा तत्व होगा।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <bits/stdc++.h> using namespace std; void calcGreatestSmallerElement(string N, int size) { int i, j; for (i = size - 1; i > 0; i--) if (N[i] < N[i - 1]) break; if (i == 0) { cout << "Previous number is not possible"; return; } int x = N[i - 1], greatest = i; for (j = i; j < size; j++) if (N[j] < x && N[j] > N[greatest]) greatest = j; swap(N[greatest], N[i - 1]); sort(N.begin() + i, N.begin() + size, greater<char>()); cout<<"The Greatest smaller number with same set of digits is "<<N; return; } int main() { string N = "654232"; int size = N.length(); cout<<"The number is "<<N<<endl; calcGreatestSmallerElement(N, size); return 0; }
आउटपुट
The number is 654232 The Greatest smaller number with same set of digits is 654223