Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Xây dựng mảng từ XOR của tất cả phần tử trừ phần tử tại cùng chỉ số trong C++

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

  1. Tính x = XOR của tất cả phần tử A.
  2. 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