描述
现在社会上的抽奖活动简直是太多了。前段时间中国联通就举办了一个很无聊的抽奖活动,规则是每人可以向中国联通的短信系统发送一个实数,系统每天会从这些数字中选择一个无重复(就是有且只有一个)且最小的数,而发送这个最小数的用户就中奖了。现在我们也来设计一个抽奖系统。实数太麻烦,我们只考虑整数的情况。给你一堆整数,其中有且只有一个整数是唯一的,这个唯一的整数就是中奖数字,请写程序挑选出中奖数字。假设除中奖数字外,其余出现的数都有且只有两个。
输入
输入包含多组测试数据,每组测试数据首先包含一个整数N,表示本组测试数据下共有N个数。
输出
对于每组输入的数据,请输出找出的中奖数字,每组输出占一行。
样例输入
5
1 1 2 2 3
5
123456789 123456788 123456790 123456788 123456789
样例输出
3
123456790
#include <iostream>
using namespace std;
int main(){
__int64 n,s,a,i;
while (scanf("%I64d",&n)!=EOF){
s=0;
for (i=0;i<n;i++){
scanf("%lld",&a);
s=s^a;
}
printf("%d\n",s);
}
return 0;
}
位运算:
按位与& a&b=1则为奇数,否则为偶数。
异或^ a^a=0 a^0=a,与1异或取反。
此题把所有的数进行异或,则最终结果为那个不相同的数。