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

C++ में k सेट बिट्स के साथ किसी संख्या को अधिकतम करने के लिए आवश्यक न्यूनतम फ़्लिप।

समस्या कथन

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

उदाहरण

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

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

  • 2 सेट बिट्स के साथ 4 अंकों की सबसे बड़ी बाइनरी संख्या है - 1100 यानी 12

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

एल्गोरिदम

1. Count the number of bits in n. Let us call this variable as bitCount. we can use log2(n) function from math library as fllows:
   bitCount = log2(n) + 1;
2. Find largest number with k set bits as follows: maxNum = pow(2, k) - 1;
3. Find the largest number possible with k set bits and having exactly same number of bits as n as follows:
   maxNum = maxNum << (bitCount - k);
4. Calculate (n ^ maxNum) and count number of set bits.

उदाहरण

#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++ में बाइनरी मैट्रिक्स को ज़ीरो मैट्रिक्स में बदलने के लिए फ़्लिप की न्यूनतम संख्या

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

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

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

  1. सी ++ में सेट बिट्स की गिनती के अनुसार एक सरणी को क्रमबद्ध करें

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