利用异或的思想,解决数组的重复值。
大小为int[10]数组的取值范围是1-9。
#include<stdio.h>
int re_find(int* ar, int n)
{
int tmp = 0;
for (int i = 0; i < n; i++)
{
tmp = tmp ^ ar[i];
}
for (int i = 1; i <= n - 1; i++)
{
tmp = tmp ^ i;
}
return tmp;
}
int main()
{
const int n = 10;
int ar[n] = { 1,2,3,4,5,6,7,8,9,6 };
int x = re_find(ar, n);
printf("数组的重复值是%d", x);
}
该代码的思想是,数组的范围是1-9,将数组的所有值进行异或,然后和1-9范围内所有的数异或一次。逻辑异或的结果是相同为0,不同为1。将数组内的1-9消除一遍,多出来的那个数就是重复的数值。