intmain(){ int a[] = {1, 1, 2, 2, 3, 3, 4, 4, 5}; int sz = sizeof(a) / sizeof(a[0]); int i = 0; int x = 0; for (i = 0; i < sz; i++) { x ^= a[i]; //将所有的数异或一下 } printf("%d\n", x); return 0; }
int main() { int a[] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7}; int i = 0; int sz = sizeof(a) / sizeof(a[0]); int n = 0; int pos = 0; int x = 0; int y = 0; for (i = 0; i < sz; i++) { n ^= a[i]; //将所有的数异或 得到 6^7 的结果 } for (i = 0; i < 32; i++) { if (((n >> i) & 1) == 1) { pos = i; //找到 6^7 的二进制数中为1的一位 break; } } for (i = 0; i < sz; i++) //开始分组 { if (((a[i] >> pos) & 1) == 1) { x ^= a[i]; //得到一个数 } else { y ^= a[i]; //得到另一个数 } } printf("%d %d\n", x, y); return 0; }