Bootstrap

找只出现了一次的数字

/*一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。

编写一个函数找出这两个只出现一次的数字。



例如:

有数组的元素是: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;
}

;