hdu 2095 find your present (2)

点击打开链接

题目意思是找出卡片中只出现一次的数,而且题目还保证只有一个只出现一次的数。
我们可以这样想既然只有这一个,那么其他数出现偶数次。联想到异或运算,比如1和0,1^0=1,1^1=0, 0^0=0, 0^1=1。我们可以发现对于0和1,相同的数进行异或运算为0,不同的两个数进行异或运算结果是1,而对于其他的数,只要把他转换成二进制数,然后根据运算法则进行运算,得出结果,如0^5=5, 1^5=2。而且异或运算是可结合的,比如:(1^2)^2=1^(2^2)。回到题目,对输入的数进行异或运算,最后的结果必定是只出现奇数次的那个数。

#include"stdio.h"
int main()
{
	int fact,n,m;
	while(scanf("%d",&n)!=EOF&&n)
	{
		fact=0;
		while(n--)
		{
			scanf("%d",&m);
			fact^=m;
		}
		printf("%d\n",fact);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值