//题目名称:找单身狗
//题目内容:
//一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Search(int* a, int sz, int* px, int* py)
{
int i = 0, ret = 0, pos = 0, k1 = 0, k2 = 0;
//1. 要把所有数字异或
for (i = 0; i < sz; i++)
{
ret = ret ^ *(a + i);
}
//2. 计算ret的哪一位为1
for (i = 0; i < 32; i++)
{
if (ret & (1 << i))
{
pos = i;
break;
}
}
//3. 把从低位向高的第pos位为1,为0的放在另外一个组
for (i = 0; i < sz; i++)
{
if (*(a + i) & (1 << pos))
{
k1 = k1 ^ *(a + i);
}
else
{
k2 = k2 ^ *(a + i);
}
}
*px = k1;
*py = k2;
}
int main()
{
int arr[] = { 2, 2, 3, 6, 57, 3, 8, 8, 57 ,24 };
int sz = sizeof(arr) / sizeof(arr[0]);
int x = 0, y = 0;
Search(arr, sz, &x, &y);
printf("x = %d, y = %d", x, y);
return 0;
}
c语言-找单身狗问题(一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字)。
最新推荐文章于 2024-08-21 20:44:22 发布