#include <stdio.h>
#include <stdint.h>
// Исходный массив
uint8_t N[] = {1, 202, 43, 174, 115, 77, 121, 98, 77, 115, 174, 43, 202, 1};
// Битовые маски
uint8_t B[8] = {1, 2, 4, 8, 16, 32, 64, 128};
// Накопители
uint8_t A[8] = {0, 0, 0, 0, 0, 0, 0, 0};
// По`xor`енные числа массива
uint8_t NXored = 0;
// Искомые числа
uint8_t X, Y;
int main(void) {
// Проходим по массиву
for (size_t i = 0; i < sizeof(N); i++) {
// Если j-й бит числа N[i] установлен в 1...
for (size_t j=0; j < 8; j++) {
if (N[i] & B[j]) {
// `xor`им j-й накопитель с числом из массива
A[j] = A[j] ^ N[i];
}
}
// `xor`им все числа
NXored = NXored ^ N[i];
}
printf("NXored = %u\n", NXored
); printf("A = {%u, %u, %u, %u, %u, %u, %u, %u}\n", A
[0], A
[1], A
[2], A
[3], A
[4], A
[5], A
[6], A
[7]);
// Просматриваем накопители
for (size_t j=0; j < 8; j++) {
// Если значение в накопителе отличается от нуля и от NXored, то это одно из искомых чисел
if ( (A[j] != NXored) && A[j] != 0) {
X = A[j];
// Второе вычисляем
Y = A[j] ^ NXored;
break;
}
}
printf("X = %u, Y = %u\n", X
, Y
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KCi8vINCY0YHRhdC+0LTQvdGL0Lkg0LzQsNGB0YHQuNCyCnVpbnQ4X3QgTltdID0gezEsIDIwMiwgNDMsIDE3NCwgMTE1LCA3NywgMTIxLCA5OCwgNzcsIDExNSwgMTc0LCA0MywgMjAyLCAxfTsKCi8vINCR0LjRgtC+0LLRi9C1INC80LDRgdC60LggCnVpbnQ4X3QgQls4XSA9IHsxLCAyLCA0LCA4LCAxNiwgMzIsIDY0LCAxMjh9OwoKLy8g0J3QsNC60L7Qv9C40YLQtdC70LgKdWludDhfdCBBWzhdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwoKLy8g0J/QvmB4b3Jg0LXQvdC90YvQtSDRh9C40YHQu9CwINC80LDRgdGB0LjQstCwCnVpbnQ4X3QgTlhvcmVkID0gMDsKCi8vINCY0YHQutC+0LzRi9C1INGH0LjRgdC70LAKdWludDhfdCBYLCBZOwoKaW50IG1haW4odm9pZCkgewoJLy8g0J/RgNC+0YXQvtC00LjQvCDQv9C+INC80LDRgdGB0LjQstGDCglmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVvZihOKTsgaSsrKSB7CgkJLy8g0JXRgdC70Lggai3QuSDQsdC40YIg0YfQuNGB0LvQsCBOW2ldINGD0YHRgtCw0L3QvtCy0LvQtdC9INCyIDEuLi4gCgkJZm9yIChzaXplX3Qgaj0wOyBqIDwgODsgaisrKSB7CgkJCWlmIChOW2ldICYgQltqXSkgewoJCQkJLy8gYHhvcmDQuNC8IGot0Lkg0L3QsNC60L7Qv9C40YLQtdC70Ywg0YEg0YfQuNGB0LvQvtC8INC40Lcg0LzQsNGB0YHQuNCy0LAKCQkJCUFbal0gPSBBW2pdIF4gTltpXTsKCQkJfQoJCX0KCQkvLyBgeG9yYNC40Lwg0LLRgdC1INGH0LjRgdC70LAKCQlOWG9yZWQgPSBOWG9yZWQgXiBOW2ldOwoJfQoJCglwcmludGYoIk5Yb3JlZCA9ICV1XG4iLCBOWG9yZWQpOwoJcHJpbnRmKCJBID0geyV1LCAldSwgJXUsICV1LCAldSwgJXUsICV1LCAldX1cbiIsIEFbMF0sIEFbMV0sIEFbMl0sIEFbM10sIEFbNF0sIEFbNV0sIEFbNl0sIEFbN10pOwoJCgkvLyDQn9GA0L7RgdC80LDRgtGA0LjQstCw0LXQvCDQvdCw0LrQvtC/0LjRgtC10LvQuAoJZm9yIChzaXplX3Qgaj0wOyBqIDwgODsgaisrKSB7CgkJLy8g0JXRgdC70Lgg0LfQvdCw0YfQtdC90LjQtSDQsiDQvdCw0LrQvtC/0LjRgtC10LvQtSDQvtGC0LvQuNGH0LDQtdGC0YHRjyDQvtGCINC90YPQu9GPINC4INC+0YIgTlhvcmVkLCDRgtC+INGN0YLQviDQvtC00L3QviDQuNC3INC40YHQutC+0LzRi9GFINGH0LjRgdC10LsKCQlpZiAoIChBW2pdICE9IE5Yb3JlZCkgJiYgQVtqXSAhPSAwKSB7CgkJCVggPSBBW2pdOwoJCQkvLyDQktGC0L7RgNC+0LUg0LLRi9GH0LjRgdC70Y/QtdC8CgkJCVkgPSBBW2pdIF4gTlhvcmVkOwoJCQlicmVhazsKCQl9Cgl9CgkKCXByaW50ZigiWCA9ICV1LCBZID0gJXVcbiIsIFgsIFkpOwoJCglyZXR1cm4gMDsKfQo=