• 热门专题

C语言给一组组数只有两个数只出现了一次 其他所有数都是成对出现的 找出这两个数

作者:  发布日期:2015-06-30 21:02:40
Tag标签:两个  只有  语言  
  • //给?组组数,只有两个数只出现了一次,其他所有数都是成对出现的,找出这两个数。
    #include <stdio.h>
    int find_one_pos(int num)     //找一个为为1的位置
    {
    	int n = 0;
    	while(num)
    	{
    		if (num & 1 == 1)
    			break;
    		else
    		{
    			n++;
    			num >>= 1;
    		}
    	}
    	return n;
    }
    void find_two_differ(int arr[], int len, int *num1, int *num2)
    {
    	int i = 0;
    	int pos = 0;
    	int ret = 0;
    	*num1 = 0;
    	*num2 = 0;
    	for (i = 0; i < len; i++)
    	{
    		ret ^= arr[i];
    	}
    	pos = find_one_pos(ret);
    	for (i = 0; i < len; i++)
    	{
    		if (arr[i] & (1 << pos))
    			*num1 ^= arr[i];
    		else
    			*num2 ^= arr[i];
    	}
    }
    int main()
    {
    	int arr[] = { 1, 2, 3, 4, 5, 1, 2, 3 };
    	int ret1 ;
    	int ret2 ;
    	find_two_differ(arr, sizeof(arr) / sizeof(arr[0]), &ret1, &ret2);
    	printf("num1=%d
    num2=%d
    ", ret1, ret2);
    	return 0;
    }
    
    

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规