找单身狗1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int find_dog(int arr[], int sz)
{
int ret = 0;
for (int i = 0; i < sz; i++)
{
ret ^= arr[i];
}
return ret;
}
int main()
{
int arr[] = { 1,2,3,4,1,2,3 };
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = find_dog(arr,sz);
printf("%d", ret);
}
找单身狗2
void find_dog2(int arr[], int sz)
{
//1、全部异或在一起
int i = 0;
int ret = 0;
for (i = 0; i < sz; i++)
{
ret ^= arr[i];
}
//2、计算第几位为1
int pos = 0;
for (i = 0; i < 32; i++)//一个整型只有32位
{
if (((ret >> i) & 1) == 1)
{
pos = i;
break;
}
}
//3、分组
int s1 = 0;
int s2 = 0;
for (i = 0; i < sz; i++)
{
if (((arr[i] >> pos) & 1 )== 1)
{
s1 ^= arr[i];
}
else
{
s2 ^= arr[i];
}
}
printf("s1=%d ,s2=%d", s1, s2);
}
int main()
{
int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
int sz = sizeof(arr) / sizeof(arr[0]);
find_dog2(arr, sz);
return 0;
}