题目描述:给定一个整形数组空间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; } 标签:arr,return,int,编程,ret,C语言,len,查找,result From: https://www.cnblogs.com/ccxccxccx/p/17276246.html