广师oj 2236-孤独数
有2n+1个数,其中有n对数字是成双出现的,有且仅有1个数字只有它自己一个。请你找出这个孤单数。
第一行有且只有一个正整数n(n<=500000)
第二行有2n+1个数ai(-10^9<=ai<=10^9)
有且只有一个数,输出这个孤单数。
3
6 2 6 3 7 7 3
2
利用异或^,偶数个相同的数字异或之后为零,任何非零数与零异或为其本身。
#include <stdio.h>
int main()
{
long x,y,z,t,num;
scanf("%ld",&t);
num = 0;
for(x=0;x<t*2+1;x++)
{
scanf("%ld",&z);
num = num^z;
}
printf("%ld\n",num);
return 0;
}
将2n+1个数存起来,用快排把数字排序,再判断相邻的两个数是否相同、
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[1000005];
int main()
{
int x,y,z,t;
scanf("%d",&t);
for(x=0;x<(t*2)+1;x++)
{
scanf("%d",&a[x]);
}
sort(a,a+(t*2+1));
a[t*2+1] = a[2*t]-1;
for(x=0;x<(t*2+1);x+=2)
{
if(a[x]!=a[x+1])
{
printf("%d\n",a[x]);
break;
}
}
return 0;
}