C语言编程练习_查找数组中不重复的数字
题目描述:给定一个整形数组空间arr,数据中包含两个一样的数字若干,只有一个数字是单独一个。设计一个函数把这个出现一次的数字返回出来。
解决方案一:
穷举法:假设arr数组中的每个元素都是重复的。也可能是不重复的(效率差)
#include<stdio.h>
int fun1(int arr[], int len){
int result;
int count;
int i, j;
for(i = 0; i < len; i++){
result = arr[i];
count = 0;
for(j = 0; j < len; j++){
if(result == arr[j]){
count++;
}
if(count == 2){
break;
}
}
if(count == 1){
return result;
}
}
return -1;
}
int main(){
int arr[] = {1, 2, 1, 3, 8, 3, 8, 2, 6};
int ret;
ret = fun1(arr, sizeof(arr) / sizeof(arr[0]));
printf("the result is : %d\n", ret);
return 0;
}
解决方法二:
使用异或的方法。相同值异或所得值为0,0与单个值异或的值为该值。适用于两两进行匹配,而单独多出一个,降所有结果进行异或则可找出该值。
int fun2(int arr[], int len){
int result = arr[0];
int i;
for(i = 1; i < len; i++){
result = result ^ arr[i];
}
return result;
}
int main(){
int arr[] = {1, 2, 1, 3, 8, 3, 8, 2, 6};
int ret;
ret = fun2(arr, sizeof(arr) / sizeof(arr[0]));
printf("the result is : %d\n", ret);
return 0;
}

浙公网安备 33010602011771号