一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次,找出这两个数字
#include<stdio.h>
int main()
{
int i = 0;
int ret = 0;//接受整个数组异或的最终值
int pos = 0;//标记哪个位置先出现1
int x = 0,y = 0;
int arr[] = {1,1,2,2,4,4,8,9};
for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
{
ret ^= arr[i];
}
for(i = 0; i < 32; i++)
{
if((ret>>i) & 1)
pos = i;
break;
}
for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
{
if((arr[i]>>pos)&1 == 1)//将原数组中的数字分别分成俩组分别再异或一次就得到了结果
{
x ^= arr[i];
}
else
{
y ^= arr[i];
}
}
printf("%d %d",x,y);
return 0;
}