// 给一组数,有两个数只出现了一次,其他所有数都是成对出现的。找出这两个数。
#include <stdio.h>
void find_two_diff(int arr[], int len, int *num1, int *num2)//设置两个返回型参数
{
int i = 0;
int ret = 0;
int pos = 1;
*num1 = 0;
*num2 = 0;
for (i = 0; i < len; ++i)
{
ret ^= arr[i];
}
// 找出ret中1的位置
while (ret)
{
if ((ret & 1) == 1)
{
break;
}
else
{
pos++;
ret >>= 1;
}
}
// 找对应位是1的
for (i = 0; i < len; ++i)
{
if (((1 << (pos - 1)) & arr[i]) == 0)
{
*num1 ^= arr[i];
}
else
{
*num2 ^= arr[i];
}
}
}
int main()
{
int arr[] = { 1, 2, 3, 1, 2, 3, 4, 5 };
int ret1;
int ret2;
find_two_diff(arr, sizeof(arr) / sizeof(arr[0]), &ret1, &ret2);
printf("num1 = %d, num2 = %d\n", ret1, ret2);
return 0;
}
<img src="https://img-blog.csdn.net/20150630160129763?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhcWlhbjU1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
【c语言】 给一组数,有两个数只出现了一次,其他所有数都是成对出现的。找出这两个数
最新推荐文章于 2020-04-12 00:20:14 发布