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

सी ++ में सरणी के सभी तत्वों पर एक्सओआर ऑपरेशन लागू करके सरणी योग को कम करना

विवरण

आकार की एक सरणी को देखते हुए, एन। एक तत्व एक्स खोजें जैसे कि सरणी तत्वों का योग न्यूनतम होना चाहिए जब एक्सओआर ऑपरेशन एक्स और सरणी के प्रत्येक तत्व के साथ किया जाता है।

If input array is:
arr [] = {8, 5, 7, 6, 9}
then minimum sum will be 30
Binary representation of array elments are:
8 : 1000
5 : 0101
7 : 0111
6 : 0101
9 : 1001
If X = 5 then after performing XOR sum will be 30:
8 ^ 5 = 13
5 ^ 5 = 0
7 ^ 5 = 2
6 ^ 5 = 3
9 ^ 5 = 12
Sum = 30 (13 + 0 + 2 + 3 + 12)

एल्गोरिदम

1. Create a bitMap of size 32 as we are using 32 bit integer.
2. Iterate over an array and for each element of an array:
   a. If 0th bit of an element is set then increment count of bitMap[0]
   b. If 1st bit of an element is set then increment count of bitMap[1] and so on.
3. Now find X by iterating over bitMap array as follows:
if bitMap[i] > n/2: then
X = X + pow(2, i);
4. Iterate over input array. Perform XOR operation with X and each element of an array
5. Calculate sum of array elements

उदाहरण

#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];
   int bitLength = 0;
   int sum = 0;
   int res = 0;
   fill(bitMap, bitMap + n, 0);
   for (int i = 0; i < n; ++i) {
      int num = arr[i];
      int f = 0;
      while (num > 0) {
         int rem = num % 2;
         num = num / 2;
         if (rem == 1) {
            bitMap[f]++;
         }
         ++f;
         bitLength = max(bitLength, f);
      }
   }
   int candidate = 0;
   for (int i = 0; i < bitLength; ++i) {
      int num = pow(2, i);
      if (bitMap[i] > n / 2) {
         candidate += num;
      }
   }
   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. सी++ में एक अप्रत्यक्ष ग्राफ के सभी जुड़े घटकों में न्यूनतम तत्वों का योग

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

  1. सी ++ में लगातार तत्वों के एक्सओआर का उपयोग करके सरणी के तत्व खोजें

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

  1. सी ++ का उपयोग करके सरणी के सभी तत्वों को हटाने के लिए आवश्यक संचालन की न्यूनतम संख्या।

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