一个数组中,只有两个数单独出现,其他数都是成对出现的,找出这两个数。

j_0069.gif方法一:利用位运算

#include<stdio.h>
int find_one_bit(int num)
{
	int i=0;
	while(num)
	{
		if(num%2==1)
		{
			return i;
		}
		else
		{
			i++;
		}
		num/=2;
	}
}
void find_two_num(int arr[],int len)
{
	int i=0;
	int ret=0;
	int pos=0;
	int num1=0;
	int num2=0;
	for(i=0;i<len;i++)
	{
		ret^=arr[i];
	}
	pos=find_one_bit(ret);
	for(i=0;i<len;i++)
	{
		if(((arr[i]>>pos) & 1)==1)
		{
			num1^=arr[i];
		}
		else
		{
			num2^=arr[i];
		}

	}
	printf("num1=%d,num2=%d",num1,num2);

}
int main()
{
	int arr[]={1,2,3,4,4,3,2,1,5,6};
	int len=sizeof(arr)/sizeof(arr[0]);
	find_two_num(arr,len);
	printf("\n");
	return  0;
}

j_0067.gif方法二:比较法(遍历数组)

#include<stdio.h>
int main()
{
	int arr[]={1,2,3,4,4,3,5,1,5,6};
	int i=0;
	int j=0;	
	int len=sizeof(arr)/sizeof(arr[0]);
	for(i=0;i<len;i++)
	{
		int count=0;
		for(j=0;j<len;j++)
		{
			if(arr[i]==arr[j])
			{
				count++;
			}
		}
		if(count==1)
		{
			printf("%d\n",arr[i]);
		}
	}
	return 0;
}