我是靠谱客的博主 包容冥王星,最近开发中收集的这篇文章主要介绍C语言之数组数字异或,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

   接着上次我们讨论的在一组数字中找出一个只出现一次的数,这次我们加大难度,在一组数字中找出两个只出现一次出现一次的数字。题目具体内容如下:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
   例如:int arr[] = {1,2,4,5,3,5,1,2}  这组数中出现一次的数字位3和4.
   思路:在上面这组数中如何找出3和4呢?我们知道这组数连续异或会得到3和4异或的结果(上篇中讨论过的),那么我们却得不到这两个数,但是我们上篇讨论过,如果这个数只出现了一次,那我们便能轻而易举的得到,所以我们得想办法将这一组数变为两组数,便就解决掉问题了,两个数不同,那么他们肯定有某一位或几位不同,那么我们便可以按照这位不同将其分类,具体实现过程如下:
#include<stdio.h>
#include<stdlib.h>
//函数功能 : 找出数组中两个只出现一次的数字  
//函数参数 : arr为源数组,len为数组元素个数,result用来存放结果   
//返回值   : 无 
void FindIsolateTwo(int *arr, int len, int *result)
{
	int i, all = 0, flag = 1;

	for (i = 0; i < len; i++) //所有数异或  
		all ^= arr[i];

	while (!(all&flag))  //寻找过滤位  
		flag <<= 1;

	for (i = 0; i < len; i++) //利用过滤位区分  
	{
		if (flag&arr[i])
			result[0] ^= arr[i];
		else
			result[1] ^= arr[i];
	}
}
int main()
{
	/*一个数组中只有两个数字是出现一次,
		其他所有数字都出现了两次。
		找出这两个数字,编程实现。*/
	int arr[] = {1,2,4,5,3,5,1,2};
	int temp = 0;
	int len = sizeof(arr) / sizeof(arr[0]);
	int result[] = {0};
	FindIsolateTwo(arr, len, result);
	printf("这两个数分别是:%d %dn", result[0], result[1]);
	system("pause");
	return 0;
}

最后

以上就是包容冥王星为你收集整理的C语言之数组数字异或的全部内容,希望文章能够帮你解决C语言之数组数字异或所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部