C中编程实现,一个数组中只有两个数不是成对出现,找出这两个数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ZhangaZhaoLong/article/details/83717599
  1. #define _CRT_SECURE_NO_WARNINGS 1

    #include <stdio.h>
    
    void Find(int *arr, int sz, int *p1, int *p2)
    {
    	int num = 0;
    	int i = 0;
    	int count = 0;
    
    	for (i = 0; i < sz; i++)
    	{
    		num ^= arr[i];
    	}
        
    	while (1 != (num & 1))
    	{
    		num >>= 1;
    		count++;
    	}
    
    	for (i = 0; i < sz; i++)
    	{
    		if (1 == ((arr[i] >> count) & 1))
    		{
    			*p1 ^= arr[i];
    		}
    		else
    		{
    			*p2 ^= arr[i];
    		}
    	}
    }
    
    int main()
    {
    	int arr[] = { 1, 2, 4, 5, 6, 5, 4, 2, 9, 1 };
    	int p1 = 0;
    	int p2 = 0;
    	int sz = 0;
    
    	sz = sizeof(arr) / sizeof(arr[0]);
    	Find(arr, sz, &p1, &p2);
    	printf("p1 = %d\np2 = %d\n", p1, p2);
    
    	system("pause");
    	return 0;
    }
    

猜你喜欢

转载自blog.csdn.net/ZhangaZhaoLong/article/details/83717599
今日推荐