寻找单身狗
在一个整形数组中,只有一个数字出现过一次,其他数组都是成队出现的。请找出那个单身狗。例如:数组中有:1,2,3,4,5,4,3,2,1,只有5出现了一次,其他数字都有对象,请找出单身狗5。
1.首先我们要用到按位异或"^"操作符,它的特点就是在二进制中a^a = 0(相同为零),a^b=1(相异为一),a^0 =a(遇零返本)。
2."^"按位异或操作符具有交换率的性质。
#include<stdio.h>
int DOG(int arr[],int sum)
{
int rs = 0; //假设rs是数组的第一个元素
for (int i = 0; i < sum; i++)
{
rs = rs ^ arr[i]; //判断数组元素是否有重复,不重复则赋值给rs
}
return rs; //返回rs
}
int main()
{
int sum = 0;
int arr[] = {1,2,3,4,5,4,3,2,1}; //初始化数组
sum = sizeof(arr) / sizeof(arr[0]); //用sizeof计算数组长度
int dog = DOG(arr, sum); //调用函数
printf("找到你了单身狗:%d!",dog);
return 0;
}
循环内操作如下:
1.0^1 = 1;1^1 = 0;
2.0^2 = 2;2^2 = 0;
3.0^3 = 3;3^3 = 0;
4.0^4 = 4;4^4 = 0;
5.0^5 = 5;没有对象是单身狗,则将5赋值给rs。
愿点赞的宝子,双十一之前脱单哦!