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

C++ में XOR ऑपरेशन द्वारा सरणी योग न्यूनतम करें


समस्या विवरण

एक सरणी दी गई है, एक मान X ढूंढें जिससे प्रत्येक तत्व के साथ XOR करने के बाद सरणी का योग न्यूनतम हो।

उदाहरण: arr = {8, 5, 7, 6, 9}

यदि X = 5, तो XOR के बाद: 13, 0, 2, 3, 12 → योग = 30 (न्यूनतम)

एल्गोरिदम

  1. 32-बिट बिटमैप बनाएं
  2. प्रत्येक तत्व के सेट बिट्स गिनें
  3. यदि किसी बिट पोजीशन पर सेट बिट्स > n/2 हैं, तो X में वह बिट सेट करें
  4. X से सभी तत्वों का XOR करके न्यूनतम योग निकालें

उदाहरण कोड

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
const int MAX_SIZE = 32;

int getSum(int* arr, int n) {
    int bitMap[MAX_SIZE] = {0};
    int bitLength = 0;
    
    for (int i = 0; i < n; ++i) {
        int num = arr[i];
        int f = 0;
        while (num > 0) {
            if (num % 2 == 1) bitMap[f]++;
            num /= 2;
            ++f;
            bitLength = max(bitLength, f);
        }
    }
    
    int candidate = 0;
    for (int i = 0; i < bitLength; ++i) {
        if (bitMap[i] > n / 2)
            candidate += pow(2, i);
    }
    
    int sum = 0;
    for (int i = 0; i < n; ++i)
        sum += arr[i] ^ candidate;
    
    return sum;
}

int main() {
    int arr[] = {8, 5, 7, 6, 9};
    cout << "Minimum sum: " << getSum(arr, SIZE(arr)) << "\n";
    return 0;
}

आउटपुट

Minimum sum: 30
  1. C++ में अविभाजित ग्राफ के सभी संयोजी घटकों में न्यूनतम तत्वों का योग C++ में अविभाजित ग्राफ के सभी संयोजी घटकों में न्यूनतम तत्वों का योग

    इस समस्या में, हमें N संख्याओं की एक सरणी arr दी गई है जहां arr[i] (i+1)वें नोड को दर्शाता है। साथ ही, M जोड़े किनारे हैं जहां u और v किनारे से जुड़े नोड्स को दर्शाते हैं। हमारा कार्य एक प्रोग्राम बनाना है जो अविभाजित ग्राफ के सभी संयोजी घटकों में न्यूनतम तत्वों का योग निकाले। यदि एक नोड की किसी अन

  1. - C++ में लगातार तत्वों के XOR का उपयोग करके सरणी के तत्व ढूंढना

    मान लीजिए हमें n तत्वों की सूची ढूंढनी है। लेकिन हमारे पास वास्तविक सरणी के दो लगातार तत्वों का XOR मान है। साथ ही वास्तविक सरणी का पहला तत्व दिया गया है। यदि सरणी के तत्व a, b, c, d, e, f हैं, तो दी गई सरणी a^b, b^c, c^d, d^e, e^f होगी। चूंकि पहला नंबर a दिया गया है, इससे हम सभी नंबर ढूंढ सकते हैं

  1. - C++ में सरणी के सभी तत्वों को हटाने के लिए आवश्यक न्यूनतम ऑपरेशन

    समस्या कथन एक पूर्णांक सरणी arr दी गई है, सरणी के सभी तत्वों को हटाने के लिए आवश्यक न्यूनतम ऑपरेशन की संख्या प्रिंट करें। तत्व हटाते समय निम्न प्रतिबंध है: सरणी से किसी भी तत्व को यादृच्छिक रूप से चुना जा सकता है और उससे विभाज्य हर तत्व को सरणी से हटाया जा सकता है यदि arr[] = {2, 4, 15, 10, 8,