พิจารณาว่าเราต้องหารายการ n สมาชิก แต่เรามีค่า XOR ของสมาชิกติดกันสองตัวของอาร์เรย์จริง สมาชิกแรกของอาร์เรย์จริงก็ได้รับมา ถ้าสมาชิกอาร์เรย์คือ a, b, c, d, e, f อาร์เรย์ที่ให้มาจะเป็น a^b, b^c, c^d, d^e และ e^f
เนื่องจากตัวเลขแรกได้รับมา ชื่อ a สามารถช่วยหาตัวเลขทั้งหมดได้ ถ้าอยากหาสมาชิกตัวที่สองของอาร์เรย์จริง เราต้องทำ b = a ^ arr[i] สำหรับตัวที่สาม c = b ^ arr[1] และต่อไป
ตัวอย่าง
#include <iostream>
using namespace std;
void findActualElements(int a, int arr[], int n) {
int actual[n + 1];
actual[0] = a;
for (int i = 0; i < n; i++) {
actual[i + 1] = arr[i] ^ actual[i];
}
for (int i = 0; i < n + 1; i++)
cout << actual[i] << " ";
}
int main() {
int arr[] = {12, 5, 26, 7};
int n = sizeof(arr) / sizeof(arr[0]);
int a = 6;
findActualElements(a, arr, n);
}
ผลลัพธ์
6 10 15 21 18