Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

XOR ของผลรวมของทุกคู่ที่เป็นไปได้ของอาร์เรย์ใน C++


ในปัญหานี้ เราจะได้รับอาร์เรย์ของ n องค์ประกอบ งานของเราคือสร้างลำดับของขนาด n*n ซึ่งองค์ประกอบเป็นผลรวมของคู่ขององค์ประกอบทั้งหมดของ A กับตัวเอง และพิมพ์องค์ประกอบ xor ของอาร์เรย์ผลรวมที่เกิดขึ้น

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล − A (1, 4, 5)

ผลผลิต − 0

คำอธิบาย

B (1+1, 1+4, 1+5, 4+1, 4+4, 4+5, 5+1, 5+4, 5+5)
B(2,5,6,5,8,9,6,9,10)
Xor of all values = 2^5^6^5^8^9^6^9^10 = 0.

เพื่อแก้ปัญหานี้ เราจำเป็นต้องทราบคุณสมบัติบางอย่างของ Xor XOR แรกของตัวเลขที่มีจำนวนเท่ากันคือ 0 ตอนนี้ ในอาร์เรย์ที่สร้างขึ้นใหม่ มีองค์ประกอบหลายตัวที่เหมือนกัน ซึ่งองค์ประกอบ a[i]+a[j] และ a[j]+a[i] เหมือนกัน ดังนั้น xor ของพวกมันจะเป็น 0 ดังนั้น เราจะเหลือองค์ประกอบ 2a[i] เท่านั้น ดังนั้น เราจะนำ xor ขององค์ประกอบ a[i] ทั้งหมดมาคูณด้วย สอง. นี่จะเป็นคำตอบสุดท้ายของเรา

ตัวอย่าง

โปรแกรมแสดงการใช้งานอัลกอริทึมของเรา

#include <iostream>
using namespace std;
int findSumXor(int arr[], int n){
   int XOR = 0 ;
   for (int i = 0; i < n; i++) {
      XOR = XOR ^ arr[i];
   }
   return XOR * 2;
}
int main(){
   int arr[3] = { 2, 4, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The xor of the sum pair of elements of the array is\t"<<findSumXor(arr, n);
   return 0;
}

ผลลัพธ์

The xor of the sum pair of elements of the array is 2