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

C++ में बिट्स को पुनर्व्यवस्थित करके संख्या को अधिकतम करें

समस्या कथन

एक अहस्ताक्षरित संख्या को देखते हुए, दी गई अहस्ताक्षरित संख्या के बिट्स का उपयोग करके बनाई जा सकने वाली अधिकतम संख्या ज्ञात करें

अगर इनपुट नंबर 8 है तो इसका बाइनरी प्रतिनिधित्व है-

00000000000000000000000000001000

इसे अधिकतम करने के लिए MSB को 1 पर सेट करें। फिर संख्या 2147483648 हो जाती है जिसका बाइनरी प्रतिनिधित्व है-

10000000000000000000000000000000

एल्गोरिदम

1. Count number of set bits in the binary representation of a given number
2. Find a number with n least significant set bits
3. shift the number left by (32 – n)

उदाहरण

#include <bits/stdc++.h>
using namespace std;
unsigned getMaxNumber(unsigned num){
   int n = __builtin_popcount(num);
   if (n == 32) {
      return num;
   }
   unsigned result = (1 << n) - 1;
   return (result << (32 - n));
}
int main(){
   unsigned n = 8;
   cout << "Maximum number = " << getMaxNumber(n) << endl;
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है-

Maximum number = 2147483648

  1. C++ में लंबाई p, q और r के खंडों की संख्या को अधिकतम करें

    समस्या कथन लंबाई L की एक छड़ को देखते हुए, कार्य छड़ को इस तरह से काटना है कि लंबाई p, q और r के खंडों की कुल संख्या अधिकतम हो। खंड केवल लंबाई p, q, और r के हो सकते हैं यदि l =15, p =2, q =3 और r =5 तो हम निम्नानुसार 7 खंड बना सकते हैं - {2, 2, 2, 2, 2, 2, 3} एल्गोरिदम हम डायनेमिक प्रोग्रामिंग का

  1. C++ में किसी सरणी की माध्यिका को अधिकतम करें

    समस्या कथन N तत्वों की एक सरणी arr[] और एक पूर्णांक K जहां K

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

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