zoukankan      html  css  js  c++  java
  • 【C语言】给一组组数,仅仅有两个数仅仅出现了一次,其它全部数都是成对出现的,找出这两个数。

    //给⼀组组数,仅仅有两个数仅仅出现了一次。其它全部数都是成对出现的,找出这两个数。
    #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;
    }
    
    

  • 相关阅读:
    mysql时间操作函数和存储过程
    puppet foreman
    mysql c haracter
    socket
    socket 网摘
    网络安全
    sqlite3 C接口
    spring 配置文件XSD地址
    programData
    网络安全数据包分析
  • 原文地址:https://www.cnblogs.com/llguanli/p/6729667.html
Copyright © 2011-2022 走看看