Trong bài toán này, cho một mảng n phần tử. Nhiệm vụ là tạo dãy kích thước n*n chứa tổng của mọi cặp phần tử của mảng với chính nó, sau đó in XOR của các phần tử trong dãy tổng này.
Ví dụ:
Input – A = {1, 4, 5}
Output – 0
Giải thích –
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 = 2^5^6^5^8^9^6^9^10 = 0
Quan sát: XOR của số với chính nó là 0. Trong mảng mới, a[i]+a[j] và a[j]+a[i] giống nhau nên XOR nhau ra 0. Chỉ còn lại 2*a[i]. Vậy XOR tất cả a[i] rồi nhân 2.
Ví dụ minh họa
#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 << "XOR tổng cặp phần tử của mảng: " << findSumXor(arr, n);
return 0;
}
Kết quả
XOR tổng cặp phần tử của mảng: 2