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

किसी दिए गए अहस्ताक्षरित संख्या को C++ में चरम स्थितियों पर बिट्स को स्वैप करके अधिकतम करें

समस्या कथन

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

यदि इनपुट संख्या 8 है तो इसका द्विआधारी प्रतिनिधित्व है-

00000000 00000000 00000000 00001000

चरम स्थितियों पर बिट्स की अदला-बदली के बाद संख्या बन जाती है -

00010000 00000000 00000000 00000000 and its decimal equivalent is: 268435456

एल्गोरिदम

1. Create a copy of the original number
2. If less significant bit is 1 and more significant bit is 0 then swap the bits in the bit from only, continue the process until less significant bit’s position is less than more significant bit’s position
3. Return new number

उदाहरण

#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
ull getMaxNumber(ull num){
   ull origNum = num;
   int bitCnt = sizeof(ull) * 8 - 1;
   int cnt = 0;
   for(cnt = 0; cnt < bitCnt; ++cnt, --bitCnt) {
      int m = (origNum >> cnt) & 1;
      int n = (origNum >> bitCnt) & 1;
      if (m > n) {
         int x = (1 << cnt | 1 << bitCnt);
         num = num ^ x;
      }
   }
   return num;
}
int main(){
   ull num = 8;
   cout << "Maximum number = " << getMaxNumber(num) << endl;
   return 0;
}

आउटपुट

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

Maximum number = 268435456

  1. जांचें कि क्या दिया गया मोबाइल नंबर C++ में फैंसी है

    हमारे पास 10 अंकों का मोबाइल नंबर है, हमारा काम यह जांचना है कि नंबर फैंसी नंबर है या नहीं। फैंसी नंबर के लिए तीन अलग-अलग शर्तें हैं। यदि कम से कम एक सत्य है, तो संख्या फैंसी है। ये शर्तें नीचे की तरह हैं - एक नंबर लगातार तीन बार आता है, जैसे 555 तीन क्रमागत संख्याएं या तो बढ़ते या घटते क्रम में है

  1. जांचें कि कोई संख्या दिए गए आधार में है या नहीं C++

    मान लीजिए, हमारे पास एक संख्या स्ट्रिंग है, हमें यह पता लगाना है कि संख्या दिए गए आधार B की है या नहीं? यदि स्ट्रिंग 101110, b =2 है, तो प्रोग्राम सही हो जाएगा। यदि स्ट्रिंग A8F है, तो आधार 16 है, यह सत्य होगा। दृष्टिकोण बहुत सरल है। यदि सभी वर्ण दिए गए आधार के प्रतीकों की श्रेणी में हैं, तो सही लौ

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

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