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

C++ में एक्सट्रीम पोजीशन पर बिट्स स्वैप करके अनसाइन्ड नंबर को अधिकतम करना


समस्या कथन

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

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

00000000 00000000 00000000 00001000

एक्सट्रीम पोजीशन पर बिट्स स्वैप करने के बाद संख्या बन जाती है:

00010000 00000000 00000000 00000000 और इसका दशमलव समतुल्य है: 268435456

एल्गोरिदम

1. मूल संख्या की एक कॉपी बनाएं।
2. यदि कम महत्वपूर्ण बिट 1 है और अधिक महत्वपूर्ण बिट 0 है तो केवल बिट में बिट्स स्वैप करें, प्रक्रिया जारी रखें जब तक कम महत्वपूर्ण बिट की स्थिति अधिक महत्वपूर्ण बिट की स्थिति से कम है।
3. नई संख्या वापस करें।

उदाहरण

#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) लगातार तीन अंक बढ़ते या घटते क्रम में हों (123 या 321) कोई अंक चार या अधिक बार आए उदाहरण कोड #include <iostream> #include <string> using namespace std; bool c

  1. - C++ में जांचें कि संख्या दिए गए बेस में है या नहीं

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

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

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