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

C++ में अधिकतम एक स्वैप ऑपरेशन का उपयोग करके सबसे छोटी संख्या बनाएं

इस समस्या में, हमें एक धनात्मक पूर्णांक दिया जाता है। हमारा काम अधिकतम एक स्वैप ऑपरेशन का उपयोग करके छोटी संख्या बनाने के लिए एक प्रोग्राम बनाना है।

हम मौजूदा संख्या के अंकों का उपयोग करके एक नई संख्या बनाएंगे। गठित सबसे छोटी संख्या में मौजूदा संख्या से केवल एक अंक की अदला-बदली हो सकती है।

समस्या को समझने के लिए एक उदाहरण लेते हैं

Input: n = 63519
Output: 36519

समाधान दृष्टिकोण

समस्या को हल करने की एक विधि दी गई संख्या के अंकों की जोड़ी को स्वैप करके बनाई गई सभी संख्याओं को ढूंढकर है। इन सभी अदला-बदली अंकों में से, सबसे छोटी संख्या को वापस कर दिया जाता है। इसके लिए हम नंबर को स्ट्रिंग और स्वैप पोजीशन में बदल देंगे।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;

int findSmallestNumSwapDig(int N){

   string strNum = to_string(N);
   string temp = strNum;
   for (int i = 0; i < strNum.size(); i++) {
      for (int j = i + 1; j < strNum.size(); j++) {
         swap(strNum[i], strNum[j]);
         if (stoi(strNum) < stoi(temp))
            temp = strNum;
         swap(strNum[i], strNum[j]);
      }
   }
   return stoi(temp);
}
int main(){
   int num = 792156;
   cout<<"The number is "<<num<<endl;
   cout<<"The smallest number created by swapping one digit is "<<findSmallestNumSwapDig(num) << endl;
   return 0;
}

आउटपुट

The number is 792156
The smallest number created by swapping one digit is192756

एक और तरीका

समस्या को हल करने का एक और तरीका एक अतिरिक्त सहायक सरणी aux[] का उपयोग करना है। इस सरणी का उपयोग वर्तमान सूचकांक के दाईं ओर (अधिक से अधिक सूचकांक) में सबसे छोटे अंक के सूचकांक को संग्रहीत करने के लिए किया जाता है यानी aux[i] संख्या के अंक के दाईं ओर सबसे छोटे अंक का सूचकांक है। यदि ऐसा कोई अंक मौजूद नहीं है, तो aux[i] =-1 प्रारंभ करें। अब, सूचकांक 0 से n-1 तक की संख्या को पार करें और aux[] सरणी में संख्या ज्ञात करें जो वर्तमान मान से छोटी है। इंडेक्स 0 मान के लिए, गैर-शून्य तत्व की जांच करें, यदि 0 होता है तो मान को छोड़ दें। अगर कोई तत्व मिलता है, तो arr[i] और arr[aux[i]] की अदला-बदली करें और बनाए गए नंबर को वापस कर दें।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;

int findSmallestNumSwapDig(int N){

   string num = to_string(N);
   int n = num.size();
   int auxArr[n], right;
   auxArr[n - 1] = -1;
   right = n - 1;
   for (int i = n - 2; i >= 1; i--) {
      if (num[i] >= num[right])
         auxArr[i] = right;
      else {
         if (num[i] == num[i + 1])
            auxArr[i] = right;
         else {
            auxArr[i] = -1;
            right = i;
         }
      }
   }
   int small = -1;
   for (int i = 1; i < n; i++)
   if (num[i] != '0') {
      if (small == -1) {
         if (num[i] < num[0])
            small = i;
      }
      else if (num[i] <= num[small])
            small = i;
   }
   if (small != -1)
      swap(num[0], num[small]);
   else {
      for (int i = 1; i < n; i++) {
         if (auxArr[i] != -1 && num[i] != num[auxArr[i]]) {
            swap(num[i], num[auxArr[i]]);
            break;
         }
      }
   }
   return stoi(num);
}
int main(){
   int num = 792156;
   cout<<"The number is "<<num<<endl;
   cout<<"The smallest number created by swapping one digit is" <<findSmallestNumSwapDig(num)<< endl;
      return 0;
}

आउटपुट

The number is 792156
The smallest number created by swapping one digit is192756

  1. C++ का उपयोग करके पंचकोणीय पिरामिड संख्या ज्ञात कीजिए

    एक पंचकोणीय पिरामिड संख्या एक पंचकोणीय आधार पिरामिड में मदों की संख्या के बराबर होती है। नीचे कुछ पंचकोणीय संख्याओं को देखें। N तक पंचकोणीय संख्याओं का योग Nवीं पंचकोणीय पिरामिड संख्या के बराबर होता है। इस लेख में, हम उदाहरण के लिए, Nth पंचकोणीय पिरामिड संख्या खोजने पर चर्चा करेंगे Input : N = 4

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu

  1. C++ . का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात कीजिए

    बिंदु X और Y के बीच मध्यवर्ती ट्रेन स्टेशनों की संख्या n है। गिनें कि अलग-अलग तरीकों से ट्रेनों को s स्टेशनों पर रुकने के लिए व्यवस्थित किया जा सकता है जैसे कि कोई भी दो स्टेशन एक दूसरे के बगल में नहीं हैं। तो इस लेख में, हम स्टॉपिंग स्टेशनों की संख्या का पता लगाने के लिए हर संभव तरीके की व्याख्या क