找出数组中出现一次的两个数

*1.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 

找出这两个数字,编程实现。*/ 

方法一:

#include<stdio.h>
int main()
{

	int arr[12] = {1,2,3,4,5,6,1,2,3,4,5,9};
	int i = 0;
	int j = 0;
	int cnt = 0;
	for (i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
	{
		cnt = 0;
		for (j=0;j<sizeof(arr)/sizeof(arr[0]);j++)
		{
			if (arr[i] == arr[j])
			{
				cnt++;
			}
		}
		if (cnt == 1)
		{
			printf("%d 出现一次\n",arr[i]);
		}
	}
	return 0;
}

方法二:

#include<stdio.h>  
int main()  
{  
    int i = 0;  
    int ret = 0;  
    int pos = 0;  
    int arr[] = { 1,2,3,4,5,6,1,2,3,4 };  
    int sz = sizeof(arr) / sizeof(arr[0]);  
    int num1 = 0;  
    int num2 = 0;  
    for (i = 0; i < sz; i++)  
    {  
        ret ^= arr[i];  
    }  
    //找ret二进制中为1的一位  
    for (i = 0; i < 32; i++)  
    {  
        if (((ret >> 1) & 1) == 1)  
        {  
            pos = i;  
            break;  
        }  
    }  
    //分组  
    for (i = 0; i < sz; i++)  
    {  
        if (((arr[i] >> pos) & 1)==1)  
  
        {  
            num1 ^= arr[i];  
        }  
    }  
     num2 = num1^ret;  
     printf("num1 = %d   num2 = %d\n", num1, num2);  
     system("pause");  
     return 0;  
}
相比以上两种方法,方法一还是简单一些,望大佬有更好的方法推荐

猜你喜欢

转载自blog.csdn.net/qq_39478237/article/details/80778206