/*一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。
例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void fine_dog(int arr[],int sz,int dog[])
{
int ret = 0;
int pos = 0;
for (int i = 0;i < sz;i++)
{
ret = ret ^ arr[i];
}
for (int i = 0;i < 32;i++)
{
if ((ret >> i) & 1 == 1)
{
pos = i;
}
}
for (int i = 0;i < sz;i++)
{
if ((arr[i] >> pos) & 1==1)
{
dog[0] ^= arr[i];
}
else
{
dog[1] ^= arr[i];
}
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,1,2,3,4,6 };
int dog[2] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
fine_dog(arr,sz,dog);
printf("%d %d", dog[0], dog[1]);
return 0;
}