方法一:暴力求解
//在一组数中找出不成对的那个数
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,1,2,3} ;
int len=sizeof(arr)/sizeof(arr[0]);//计算arr长度
int i=0;
for(i=0;i<len;i++)
{
int count=0;
for(j=0;j<len;j++)
{
if(arr[i]==arr[j])
count++;
}
if(count==1)
printf("%d\n",arr[i]);
}
return 0;
}
方法二:优化算法
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,1,2,3} ;
int len=sizeof(arr)/sizeof(arr[0]);//计算arr长度
int i=0;
for(i=0;i<len;i++)
{
arr[i+1]=arr[i]^arr[i+1];//所有数进行异或,最终剩下的数即为所找
}
printf("%d\n",arr[len]);
return 0;
}
总结:
暴力求解可以找出多个落单数,但是循环次数增加过多,按位异或循环次数大大减少,但是只能找出一个,多个落单数存在时,结果会错误。