第一种方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int find_diff(int *arr,int sz)
{
int i = 0;
int j = 0;
for(i=0; i<sz; i++)
{
for (j=0; j<sz; j++)//利用双重循环来找出一组数据中只出现一次的数
{
if ((arr[i] == arr[j]) && (i != j))
{
break;//如果找到相同的就跳出内层循环,执行下次循环
}
}
if (j == sz)//如果j等于sz,说明没有找到相同数,则将下标返回
{
return i;
}
}
}
int main()
{
int i = 0;
int arr[] = {1,3,5,7,1,3,5};//单身狗:7
int num = 0;
i = find_diff(arr,sizeof(arr)/sizeof(int)+1);
num = arr[i];
printf("single : %d\n",num);
system("pause");
return 0;
}
优化后的第二种方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<assert.h>
int single_num(int *arr, int len)
{
int i = 0;
int res = 0;
assert(arr);//使用断言检查指针是否为空
assert(len >0);//使用断言判断数组大小是否小于等于0
res = arr[0];
for (i=1;i<len;i++)
{
res ^= arr[i];//异或找出不同的数
}
return res;
}
int main()
{
int meg[] = {1,2,3,4,5,6,11,6,5,4,3,2,1};//单个数:11
int single = 0;
single = single_num(meg,sizeof(meg)/sizeof(int));
printf("single : %d",single);
system("pause");
return 0;
}