一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)

#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