কম্পিউটার

C++ এ পূর্ণসংখ্যার প্রতিটি সংখ্যার সাথে XOR করার সময় ন্যূনতম যোগফল দেওয়ার একটি সংখ্যা খুঁজুন


ধারণা

অ-ঋণাত্মক পূর্ণসংখ্যাগুলির প্রদত্ত অ্যারের Arr[] এর ক্ষেত্রে, কাজটি হল একটি পূর্ণসংখ্যা X নির্ধারণ করা যাতে (Arr[0] XOR X) + (Arr[1] XOR X) + … + Arr[n – 1] XOR X ন্যূনতম সম্ভব।

ইনপুট

Arr[] = {3, 4, 5, 6, 7}

আউটপুট

X = 7, Sum = 10

পন্থা

তাই আমরা বাইনারি উপস্থাপনায় অ্যারের প্রতিটি সংখ্যার 'i'th বিট যাচাই করব এবং সেই সংখ্যাগুলি বিবেচনা করব এবং গণনা করব যেখানে সেই 'i’th বিটটি '1' এ সেট করা আছে কারণ এই সেট বিটগুলি ন্যূনতম করার পরিবর্তে যোগফলকে সর্বাধিক করতে অবদান রাখবে। এর ফলস্বরূপ, আমাদের এই সেটটি 'i'th বিট থেকে '0' তৈরি করতে হবে যদি গণনা N/2-এর থেকে বেশি হয় এবং গণনা N/2-এর থেকে কম হয় তবে 'i'th বিট সেট থাকা সংখ্যাগুলি কম হয়। এবং এর ফলে এটি উত্তরকে প্রভাবিত করবে না। আমরা জানি দুটি বিটের XOR অপারেশন অনুসারে, যখন A XOR B এবং A এবং B উভয়ই একই হয় তখন এটি '0' হিসাবে ফলাফল প্রদান করে তাই আমরা সেই 'i'th বিটটিকে আমাদের সংখ্যা (সংখ্যা) থেকে '1'-এ তৈরি করব, এর ফলে (1 XOR 1) '0' দেবে এবং যোগফল কমিয়ে দেবে।

উদাহরণ

// C++ implementation of the approach
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
void findX1(int arr1[], int n1){
   int* itr1 = max_element(arr1, arr1 + n1);
   int p1 = log2(*itr1) + 1;
   int X1 = 0;
   for (int i = 0; i < p1; i++) {
      int count1 = 0;
      for (int j = 0; j < n1; j++) {
         if (arr1[j] & (1 << i)) {
            count1++;
         }
      }
      if (count1 > (n1 / 2)) {
         X1 += 1 << i;
      }
   }
   long long int sum1 = 0;
   for (int i = 0; i < n1; i++)
      sum1 += (X1 ^ arr1[i]);
   cout << "X = " << X1 << ", Sum = " << sum1;
}
// Driver code
int main(){
   int arr1[] = { 3, 4, 5, 6, 7 };
   int n1 = sizeof(arr1) / sizeof(arr1[0]);
   findX1(arr1, n1);
   return 0;
}

আউটপুট

X = 7, Sum = 10

  1. C++ ব্যবহার করে একটি অ্যারেতে জোড়ার সংখ্যা খুঁজুন যাতে তাদের XOR 0 হয়।

  2. C++ ব্যবহার করে সংখ্যার ন্যূনতম যোগফল নির্ণয় করুন।

  3. একটি অ্যারেতে ন্যূনতম সংখ্যা যোগ করুন যাতে যোগফল C++ এ সমান হয়?

  4. পাইথনে পূর্ণসংখ্যার প্রতিটি সংখ্যার সাথে XOR যখন ন্যূনতম যোগফল দেয় এমন একটি সংখ্যা খুঁজুন