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;
}



原文地址:https://www.cnblogs.com/yyf573462811/p/6365261.html