请问如何用函数查找没有成对出现的数值?
如何确定其没有成对出现?
比如以下实例
假设一个整型数组中,有9个元素。这些元素中,有4个数值是成对出现的(位置随机),有1个数值没有成对出现。
例如:{ 2, 5, 4, 5, 9, 2, 4, 8, 9 } 中,数值8仅出现了一次,而其他数值出现了2次。
请用文字描述一个算法,可以将符合此条件的数组中仅出现1次的数值找出来。
#include <stdio.h>
int main() {
int arr[] = {2, 5, 4, 5, 9, 2, 4, 8, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int res = 0;
for (int i = 0; i < n; i++) {
res ^= arr[i];
}
printf("仅出现一次的数值为:%d\n", res);
return 0;
}
分析:
#include <stdio.h>
int main()
{
int a[18]={1,2,3,4,5,6,7,8},i,j=0; //只写八个数字,默认前八个赋值
for(i=8;i<18;i++)
scanf("%d",&a[i]); //循环赋值
for(i=17;i>=0;i--)
{
printf("%5d\t",a[i]); //放一个制表符\t整齐一点儿
j++; //j用于计数,换行输出
if(j%5==0)
printf("\n");
}
return 0;
}
运行:
假设仅仅只有一个不成对的话,可以利用异或操作特点来查找,异或^的特点是:两相同数值异或后为零,不同数值异或后是二进制的并集;那么最后成对的就会被过滤掉,剩下的就是那个不成对的数值。