之前在做这类问题的时候总想着要不要自己再创建一个数组,像一个跟屁虫一样记录着出现次数,现在一想完全没用。利用局部变量的知识就可以完全解决了
上代码:
#include<stdio.h>
int main(void)
{
int a[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4 };
int sz = sizeof(a) / sizeof(a[0]);
int i = 0;
int j = 0;
for (i = 0; i < sz; i++)
{
int count=0;//这里就是那个点睛之笔
for (j = 0; j < sz; j++)
{
if (a[i] == a[j])
count++;
}
if (count == 1)//是更上方的count呼应的状态
{
printf("%d", a[i]);
break;
}
}
return 0;
}
当然了,这只是简单的暴力求解法而已,我们要追求的是简单又巧妙的求解方式:
下面这个充分使用了异或的交换律
3异或5异或3=3异或3异或5
#include<stdio.h>
int main(void)
{
int a[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4 };
int sz = sizeof(a) / sizeof(a[0]);
int i=0;
int n=0;
for(i=0;i<sz;i++)
{
n^=a[i];
}
printf("%d",n);
return 0;
}
补充一下异或的性质吧:
0异或任意一个数=它本身
自己异或自己=0
异或的交换律