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

C++ में k सेट बिट्स के साथ नंबर को अधिकतम करने के लिए न्यूनतम फ्लिप्स


समस्या कथन

दो नंबर n और k दिए गए हैं, हमें दिए गए नंबर को उसके बिट्स फ्लिप करके अधिकतम करने के लिए आवश्यक न्यूनतम फ्लिप्स की संख्या ढूंढनी है जैसे कि परिणामी नंबर में ठीक k सेट बिट्स हों। कृपया ध्यान दें कि इनपुट को कंडीशन पूरी करनी चाहिए कि k, n में बिट्स की संख्या से कम हो।

उदाहरण

  • मान लीजिए n = 9 और k = 2

  • 9 का बाइनरी प्रतिनिधित्व - 1001। इसमें 4 बिट्स हैं।

  • 2 सेट बिट्स के साथ सबसे बड़ा 4 डिजिट बाइनरी नंबर - 1100 यानी 12

  • 1001 को 1100 में बदलने के लिए हमें हाइलाइटेड 2 बिट्स फ्लिप करने होंगे

एल्गोरिदम

1. n में बिट्स की संख्या गिनें। इस वेरिएबल को bitCount कहें। हम मैथ लाइब्रेरी से log2(n) फंक्शन का उपयोग इस प्रकार कर सकते हैं:    bitCount = log2(n) + 1; 2. k सेट बिट्स के साथ सबसे बड़ी संख्या ढूंढें: maxNum = pow(2, k) - 1; 3. n के समान बिट्स की संख्या और k सेट बिट्स के साथ सबसे बड़ी संभावित संख्या ढूंढें:    maxNum = maxNum << (bitCount - k); 4. (n ^ maxNum) की गणना करें और सेट बिट्स की संख्या गिनें।

उदाहरण

#include <iostream> #include <cmath> using namespace std; int getSetBits(int n){    int cnt = 0;    while (n) {       ++cnt;       n = n & (n - 1);    }    return cnt; } int minFlipsRequired(int n, int k){    int bitCount, maxNum, flipCount;    bitCount = log2(n) + 1;    maxNum = pow(2, k) - 1;    maxNum = maxNum << (bitCount - k);    flipCount = n ^ maxNum;    return getSetBits(flipCount); } int main(){    cout << "Minimum required flips: " << minFlipsRequired(9, 2) << "\n";    return 0; }

आउटपुट

जब आप उपरोक्त प्रोग्राम को कंपाइल और एक्जीक्यूट करते हैं। यह निम्नलिखित आउटपुट जनरेट करता है -

Minimum required flips: 2

  1. C++ में बाइनरी मैट्रिक्स को शून्य मैट्रिक्स में बदलने के लिए न्यूनतम फ्लिप C++ में बाइनरी मैट्रिक्स को शून्य मैट्रिक्स में बदलने के लिए न्यूनतम फ्लिप

    मान लीजिए हमारे पास एक m x n बाइनरी मैट्रिक्स mat है। एक चरण में, हम एक सेल चुन सकते हैं और उसके बिट और उसके चारों पड़ोसियों (यदि मौजूद हों) को फ्लिप कर सकते हैं। हमें मैट्रिक्स को शून्य मैट्रिक्स में बदलने के लिए आवश्यक न्यूनतम चरणों की संख्या ज्ञात करनी है। यदि कोई समाधान नहीं है, तो -1 वापस करें।

  1. - C++ में जांचें कि संख्या के बिट्स वैकल्पिक पैटर्न में हैं या नहीं - सेट 1

    आइए मान लें हमारे पास एक पूर्णांक n है। समस्या यह जांचना है कि क्या इस पूर्णांक के बाइनरी समकक्ष में वैकल्पिक पैटर्न हैं या नहीं। वैकल्पिक पैटर्न का अर्थ है 101010...।दृष्टिकोण ऐसा है: बाइनरी समकक्ष का उपयोग करके प्रत्येक अंक की जांच करें, और यदि दो लगातार समान हैं, तो फाल्स लौटाएं, अन्यथा सत्य।उदाह

  1. - C++ में सेट बिट्स की संख्या के अनुसार ऐरे सॉर्ट करें

    यहां हम सेट-बिट्स के आधार पर ऐरे को सॉर्ट करने की एक दिलचस्प समस्या देखेंगे। जब ऐरे में किसी एलिमेंट में अधिक सेट-बिट्स होते हैं, तो उसे उस एलिमेंट से पहले रखा जाएगा जिसमें कम सेट बिट्स होते हैं। मान लीजिए कुछ नंबर्स हैं 12, 15, 7। तो सेट बिट्स मूल रूप से उनके बाइनरी प्रतिनिधित्व में 1s की संख्या है