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

假装没事ソ 提交于 2019-11-28 16:10:44

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

//思路:
//一个数异或同一个数两次,这个数的值不会变;
//0异或任何数(1次)都等于该数;
//定义一个局部变量赋值为0,让其依次与该组数据的
//每一项相与,最后观察该局部变量的值,就是要找的
//那个数.

#include<stdio.h>
#include<stdlib.h>

//找只出现一次的数的函数
int first_occer_number(int arr[],int len){
	int i;
	int num = 0;
	for (i = 0; i < len; ++i){  //遍历数组arr
		num ^= arr[i];  //num的值更新为num按位与arr[i]
	}
	return num;  //返回num的值
}

//主函数
int main(){
	int arr[] = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };  //定义数组并初始化
	int len = sizeof(arr) / sizeof(arr[0]);  //计算并保存arr的长度
	int ret = first_occer_number(arr, len);  
	//接收函数first_occer_number()函数调用结果
	printf("%d\n", ret);  //打印输出结果
	system("pause");
	return 0;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!