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

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. - C++ में अगली संख्या का बाइनरी प्रतिनिधित्व

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

  1. - C++ में अक्ष के एक तरफ शेष बिंदुओं को प्राप्त करने के लिए हटाए जाने वाले न्यूनतम बिंदु

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

  1. - C++ में इंटीजर का वन्स कॉम्प्लीमेंट खोजें

    इस सेक्शन में, हम देखेंगे कि इंटीजर का 1s कॉम्प्लीमेंट कैसे खोजें। हम कॉम्प्लीमेंट ऑपरेटर का उपयोग करके यह कार्य बहुत तेजी से कर सकते हैं, लेकिन यह 32-बिट कॉम्प्लीमेंटेड वैल्यू बनाएगा (4-बाइट इंटीजर)। यहां हम n-बिट नंबर्स का कॉम्प्लीमेंट चाहते हैं।मान लीजिए हमारे पास एक नंबर है जैसे 22। इसका बाइनरी