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

C++ में अधिकतम मान प्राप्त करने के लिए बाइनरी नंबर से एक बिट निकालें

उस समस्या की चर्चा कीजिए जिसमें हमें एक द्विअंकीय संख्या दी जाती है। हमें इसमें से थोड़ा सा हटाना होगा ताकि शेष संख्या अन्य सभी विकल्पों में से अधिकतम हो, उदाहरण के लिए

Input : N = 1011
Output: 111
Explanation: We need to remove one bit so removing 0 bit will give a maximum number than removing any 1’s bit. 111 > 101, 011.

Input: 111
Output: 11
Explanation: Since all the bits are 1 so we can remove any bit.

समाधान खोजने के लिए दृष्टिकोण

ब्रूट-फोर्स मेथड

पाशविक बल लगाने से अधिकतम परिणामी संख्या प्राप्त होगी, अर्थात, प्रत्येक बिट को एक-एक करके हटाकर, विभिन्न परिणामों की तुलना करके, और अधिकतम परिणाम प्राप्त करके।

लेकिन एक कुशल तरीका है कि यह उपयोग कर सकता है, अर्थात, यदि हम कम से कम अनावश्यक बिट को हटा दें।

कुशल दृष्टिकोण

कुशल दृष्टिकोण परिणामी संख्या पर कम से कम प्रभाव डालेगा।

  • सबसे पहले, दाईं ओर से बिट्स को पार करें।

  • 0 खोजें और इसे पहले काउंटर पर हटा दें।

  • अगर 0 नहीं मिलता है, तो कोई बिट हटा दें।

उदाहरण

कुशल दृष्टिकोण के लिए C++ कोड

#include <bits/stdc++.h>
using namespace std;
int main(){
    string str = "1011";
    bool flag = false;
    int n = str.length();
    // Initialising new array for
    char res[n - 1];
    int j = 0;
    // traversing through the binary number from right.
    for (int i = 0; j < n - 1; i++) {
        // if 0 is found then skip it.
        if (str[i] == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            res[j++] = str[i];
    }
    // printing the resulting string.
    cout << "Maximum number: " << res;
    return 0;
}

आउटपुट

Maximum number: 111

उपरोक्त कोड की व्याख्या

  • एक ध्वज चर का उपयोग किया जाता है ताकि केवल एक 0 हटा दिया जाए।

  • परिणामी संख्या को स्टोर करने के लिए कैरेक्टर ऐरे रेस को इनिशियलाइज़ किया जाता है।

  • लूप n-1 तक चलेगा क्योंकि हमें मूल संख्या से एक कम तत्व स्टोर करने की आवश्यकता है।

निष्कर्ष

इस ट्यूटोरियल में, हमने इसमें से एक बिट को हटाने के बाद अधिकतम संख्या खोजने पर चर्चा की। हमने इस समस्या को हल करने के लिए दो तरीकों पर चर्चा की।

हम उसी के लिए C++ कोड भी लिखते हैं, जिसे हम किसी अन्य भाषा जैसे C, Java, Python, आदि में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगेगा।


  1. C++ में किसी संख्या में k ब्रेकप्वाइंट डालने के बाद अधिकतम खंड मान

    इस समस्या में, हमें एक स्ट्रिंग दी जाती है जो एक बड़ी संख्या को दर्शाती है और एक पूर्णांक k roar ब्रेकप्वाइंट की संख्या को दर्शाता है। हमारा काम एक प्रोग्राम बनाना है जो एल ब्रेकप्वाइंट को एक संख्या में डालने के बाद अधिकतम सेगमेंट मान प्राप्त करेगा। यहां, हमें वह अधिकतम संख्या ज्ञात करनी है जो स्ट्

  1. C++ में बाइनरी स्ट्रिंग से सबस्ट्रिंग 010 को हटाने के लिए न्यूनतम कदम

    समस्या कथन एक बाइनरी स्ट्रिंग को देखते हुए, कार्य इस बाइनरी स्ट्रिंग से सबस्ट्रिंग 010 को हटाने के लिए न्यूनतम चरणों की गणना करना है उदाहरण यदि इनपुट स्ट्रिंग 010010 है तो 2 चरणों की आवश्यकता है पहले 0 को 1 में बदलें। अब स्ट्रिंग 110010 हो जाती है अंतिम 0 को 1 में बदलें। अब अंतिम स्ट्रिंग 110011

  1. सी ++ में किसी संख्या का सबसे महत्वपूर्ण सेट बिट खोजें

    यहां हम देखेंगे कि यदि कोई संख्या दी गई है, तो सबसे महत्वपूर्ण बिट मान का मान कैसे ज्ञात किया जाए, जो कि निर्धारित है। मान 2 की शक्ति है। इसलिए यदि संख्या 10 है, तो MSB मान 8 होगा। हमें MSB की स्थिति का पता लगाना है, फिर kth स्थिति पर एक सेट-बिट के साथ संख्या का मान ज्ञात करना है। उदाहरण #include&l