找“单身狗”:数组里面的数都是成对出现的,唯独“单身狗”是单独出现的。
代码如下:
方法一:(这种方法只能找一只“单身狗”)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//异或:将十进制数转化为二进制数,各个二进制位一一对应,相同为0,相异为1
int main()
{
int arr[] = { 1,2,3,4,5,6,1,2,3,4,5};
int len = sizeof(arr) / sizeof(int);//求出数组arr的长度
int x = 0;//将x初始化成0,因为0与任何数异或都为任何数
int i;
for (i = 0; i < len; i++)
{
x ^= arr[i];//等价于:x = x^arr[i]
}
printf("%d", x);//最后x的结果就为“单身狗”
return 0;
}
方法二:(这种方法可以找多只“单身狗”)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,1,2,3,4,5,7 };
int len = sizeof(arr) / sizeof(int);//求出数组arr的长度
int a[2];//用数组a来储存“单身狗”,方括号里面填一个大于或等于“单身狗”数量的数字
int f = 0;//用f来判断是否有找到“单身狗”,找到了则为1,否则为0
int c = 0;//用c来记录“单身狗”的数量
int i, j;
for (i = 0; i < len; i++)
{
f = 0;
for (j = 0; j < len; j++)
{
if (arr[i] == arr[j] && i != j)
//如果找到了一个与自己相同的数,且这个数不是自己,则不是“单身狗”
{
f = 1;
break;
}
}
if (f == 0)
{
a[c] = arr[i];
c++;
}
}
for (i = 0; i < c; i++)
{
printf("%d ", a[i]);
}
return 0;
}
如有不足,还望指出,感谢。