抽奖 bjfu1009 位运算

描述

现在社会上的抽奖活动简直是太多了。前段时间中国联通就举办了一个很无聊的抽奖活动,规则是每人可以向中国联通的短信系统发送一个实数,系统每天会从这些数字中选择一个无重复(就是有且只有一个)且最小的数,而发送这个最小数的用户就中奖了。现在我们也来设计一个抽奖系统。实数太麻烦,我们只考虑整数的情况。给你一堆整数,其中有且只有一个整数是唯一的,这个唯一的整数就是中奖数字,请写程序挑选出中奖数字。假设除中奖数字外,其余出现的数都有且只有两个。

输入

输入包含多组测试数据,每组测试数据首先包含一个整数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异或取反。

此题把所有的数进行异或,则最终结果为那个不相同的数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值