一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
void single(int arr[], int sz)
{
int i = 0;
int ret = 0;
int single1 = 0;
int single2 = 0;
//将整个数组异或在一起
for (i = 0; i < sz; i++)
{
ret ^= arr[i];
}
//找到为0的位
int pos = 0;
for (i = 0; i < sz; i++)
{
if (((ret >> i) & 1) == 1)
{
pos = i;
break;
}
}
//将第i位为0的分一组(异或在一起)
for (i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1) == 0)
{
single1 ^= arr[i];
}
}
single2 = ret ^ single1;
printf("%d %d", single1, single2);
}
int main()
{
int arr[] = { 1,3,1,4,3,2,4,5,6,6 };
int sz = sizeof(arr) / sizeof(arr[0]);
single(arr, sz);
return 0;
}
编写一个函数找出这两个只出现一次的数字。