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

सी++ में कम से कम एक स्वैप ऑपरेशन का उपयोग करते हुए अगली उच्च संख्या

एक संख्या n को देखते हुए, संख्या के किन्हीं दो अंकों की अदला-बदली करें ताकि परिणामी संख्या संख्या n से अधिक हो। यदि यह संभव नहीं है तो -1 प्रिंट करें। आइए एक उदाहरण देखें।

इनपुट

12345

आउटपुट

12354

हमने 4 और 5 अंकों की अदला-बदली की है और हमें एक स्वैप के साथ उच्च संख्या मिली है।

एल्गोरिदम

  • यदि संख्या के अंक घटते क्रम में हैं तो संख्या बनाना संभव नहीं है।

  • उस संख्या के दाईं ओर से अंक का सूचकांक ज्ञात कीजिए जो अंतिम अंक से कम है।

  • उस अंक का सूचकांक ज्ञात कीजिए जो पिछले अंक से बड़ा और सभी अंकों से छोटा हो।

  • दो अंकों की अदला-बदली करें और नया नंबर लौटाएं।

  • नया नंबर लौटाएं।

कार्यान्वयन

C++ में उपरोक्त एल्गोरिथम का कार्यान्वयन निम्नलिखित है

#include <bits/stdc++.h>
using namespace std;
string getNextHigherNumber(string num) {
   int len = num.size();
   int firstDigitIndex = -1;
   for (int i = len - 2; i >= 0; i--) {
      if (num[i] < num[len - 1]) {
         firstDigitIndex = i;
         break;
      }
   }
   if (firstDigitIndex == -1) {
      return "-1";
   }
   int secondDigitIndex = -1;
   for (int i = len - 1; i > firstDigitIndex; i--) {
   if (num[i] > num[firstDigitIndex]) {
      if (secondDigitIndex == -1 || num[i] <= num[secondDigitIndex]) {
         secondDigitIndex = i;
         }
      }
   }
   char temp = num[firstDigitIndex];
   num[firstDigitIndex] = num[secondDigitIndex];
   num[secondDigitIndex] = temp;
   return num;
}

int main() {
   string num = "12345";
   cout << "Given number: " << num << endl;
   cout << "Next higher number: " << getNextHigherNumber(num) << endl;
   return 0;
}

आउटपुट

यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

Given number: 12345
Next higher number: 12354

  1. सी++ में अगले नंबर का बाइनरी प्रतिनिधित्व

    इस समस्या में, हमें एक संख्या का द्विआधारी प्रतिनिधित्व दिया जाता है और हमें अगली संख्या का द्विआधारी प्रतिनिधित्व यानी वह संख्या ढूंढनी होती है जो दी गई संख्या में एक जोड़ने के बाद प्राप्त होती है। द्विआधारी प्रतिनिधित्व संख्या का आधार संख्या के आधार को आधार 2 में बदल रहा है और केवल 0 या 1 का उपयो

  1. C++ का उपयोग करके अक्ष के एक तरफ शेष अंक प्राप्त करने के लिए हटाए जाने वाले अंकों की न्यूनतम संख्या।

    समस्या कथन कार्तीय तल में हमें N अंक दिए गए हैं। हमारा कार्य किसी भी अक्ष के एक तरफ शेष अंक प्राप्त करने के लिए हटाए जाने वाले अंकों की न्यूनतम संख्या ज्ञात करना है। यदि दिया गया इनपुट {(10, 5), (-2, -5), (13, 8), (-14, 7)} है तो यदि हम (-2, -5) हटा दें तो शेष सभी बिंदु X से ऊपर हैं। -अक्ष। अतः उ

  1. C++ में एक पूर्णांक का पूरक खोजें

    इस भाग में, हम देखेंगे कि किसी पूर्णांक का 1 पूर्ण कैसे ज्ञात किया जाता है। हम इस कार्य को बहुत तेजी से करने के लिए पूरक ऑपरेटर का उपयोग कर सकते हैं, लेकिन यह 32 बिट पूरक मूल्य (4-बाईप पूर्णांक) बना देगा। यहाँ हम n बिट संख्याओं का पूरक चाहते हैं। मान लीजिए कि हमारे पास एक संख्या 22 है। बाइनरी समकक्