#include<stdio.h>
#include<stdlib.h>
int find_numonce(int a[], int size) {
int i, j;
for (i = 0; i < size; i++) {
int flag = 1;//设立一个标志,当它为1时说明a[i]没有成对出现,它为-1时说明a[i]成对出现
for (j = 0; j < size; j++) {
//当i和j不相等时,判断a[i]和a[j]是否相等
if (i != j) {
//如果a[i]和a[j]相等(a[i] ^ a[j]) == 0
if ((a[i] ^ a[j]) == 0) {
flag = -flag;// 当a[i]和a[j]相等时,flag取反
}
}
}
//当flag=1时说明a[i]没有成对出现,返回a[i]
if (flag == 1) {
return a[i];
}
}
//如果都是成对出现的则返回-128
if (i >= size) {
return -128;
}
}
int main() {
int arr[11] = {2,3,4,5,6,7,6,5,4,3,2 };
int len = sizeof(arr) / sizeof(arr[0]);//求数组的长度
int ret=find_numonce(arr, len);//调用函数
if (ret != -128) {
//a[i]没有成对出现,打印a[i]
printf("这个只出现一次的数字是%d\n", ret);
}
else {
printf("所有数字都是成对出现的,没有一个数字只出现了一次\n");
}
system("pause");
return 0;
}
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
猜你喜欢
转载自blog.csdn.net/weixin_43267837/article/details/88939056
今日推荐
周排行