问题:给定一组数组(数组元素范围为0<N<3*10^6),除了两个数只出现一次,其余的数都出现了两次。找出这两个数。
#include<stdio.h>
int arra[3000010];
int Findbit(int flag)
{
int key=1;
while(flag&key==0)
key<<=1;
return key;
}
int main()
{
int N,flag1=0,key,i,num1=0,num2=0,index;
scanf ("%d",&N);
for (i=0;i<N;i++ )
scanf("%d",&arra[i]) ;
for(i=0;i<N;i++)
flag1^=arra[i];
key=Findbit(flag1);
for(i=0;i<N;i++)
{
if(arra[i]&key!=0)
num1^=arra[i];
else
num2^ arra[i];
}
if(num1>num2)
{
index=num1;
num1=num2;
num2=index;
}
printf ("%d %d\n",num1,num2) ;
return 0;
}
/*
输入示例
6
1 1 0 3 2 2
输出示例
0 3
*/