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;
}
posted @ 2023-03-31 14:41  碧波潭龙王爷  阅读(318)  评论(0)    收藏  举报