इस समस्या में, हमें एक स्ट्रिंग N दी गई है जो एक संख्या को दर्शाती है। हमारा कार्य समान अंकों के सेट के साथ 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