#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
int sum = 0;
for (int i = 0; i < 10; i++)
{
sum ^= arr[i];//用^找到不成对的两个数的二进制数中不相同的地方
}
int k = 0;
for (int i = 0; i < 32; i++)
{
if (((sum >> i) & 1) != 0)
{
k = i;//用k表示二进制数不同的位置
break;
}
}
int n1 = 0;
int n2 = 0;
for (int i = 0; i < 10; i++)
{
if (((arr[i] >> k) & 1) != 0)//按第k位为0或为1的情况,将两个数分开,
//再分别异或将两个数找出来,转换成两个找一个单身狗的题。
{
n1 ^= arr[i];
}
else
{
n2 ^= arr[i];
}
}
printf("%d %d", n1,n2);
return 0;
}
解析放在了注释里,有利于大家理解!!!