Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में अंकों के समान सेट के साथ 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

  1. C++ में दिए गए अंकों से बनने वाली सबसे बड़ी संख्या ज्ञात कीजिए

    मान लीजिए कि हमारे पास अंकों की एक सरणी है। हमें वह अधिकतम संख्या ज्ञात करनी है जो सरणी के सभी अंकों का उपयोग करके प्राप्त की जा सकती है। तो अगर सरणी [3, 3, 9, 6, 2, 5] की तरह है, तो अधिकतम संख्या 965332 हो सकती है। समस्या से, हम देख सकते हैं कि हम अंकों को गैर-बढ़ते क्रम में आसानी से सॉर्ट कर सकते

  1. C++ में दिए गए नंबर से कम या उसके बराबर सबसे बड़ा स्पेशल प्राइम खोजें

    मान लीजिए कि हमारे पास एक संख्या n है। हमें सबसे बड़ा विशेष अभाज्य ज्ञात करना है जो N से कम या उसके बराबर है। विशेष अभाज्य एक संख्या है, जिसे एक के बाद एक अंक रखकर बनाया जा सकता है, इसलिए सभी परिणामी संख्याएँ अभाज्य होती हैं। यहां हम Sieve Of Eratosthenes का उपयोग करेंगे। हम n संख्या तक चलनी सरणी ब

  1. N अंक संख्या ज्ञात कीजिए जो C++ में D से विभाज्य है

    मान लीजिए हमारे पास दो संख्याएँ N और D हैं। हमें N अंक संख्या ज्ञात करनी है, जो D से विभाज्य है। यदि N 3 है, और D 5 है, तो संख्या 500 हो सकती है। इसे आसानी से हल किया जा सकता है। यदि D 10 है और N 1 है, तो यह असंभव होगा। हम डी डाल सकते हैं, और मान लें कि डी में एम अंकों की संख्या है, तो इसे एन अंक सं