Cho mảng A[] n phần tử. Xây dựng mảng B[] sao cho B[i] = XOR của tất cả phần tử A trừ A[i].
Ví dụ: A = [2,1,5,9] → XOR tổng = 2^1^5^9 = 15. B = [15^2, 15^1, 15^5, 15^9] = [13,14,10,6].
Thuật toán
- Tính
x = XOR của tất cả phần tử A. - Với mỗi i:
B[i] = x ^ A[i](vì a^a=0, a^0=a).
Ví dụ minh họa (C++)
#include <iostream>
using namespace std;
void findXOR(int A[], int n) {
int x = 0;
for (int i = 0; i < n; ++i) x ^= A[i];
for (int i = 0; i < n; ++i) A[i] = x ^ A[i];
}
int main() {
int A[] = {2, 1, 5, 9};
int n = sizeof(A) / sizeof(A[0]);
cout << "Mang goc: ";
for (int x : A) cout << x << " ";
cout << "\nMang sau XOR: ";
findXOR(A, n);
for (int x : A) cout << x << " ";
return 0;
}
Kết quả
Mang goc: 2 1 5 9 Mang sau XOR: 13 14 10 6