题目意思是找出卡片中只出现一次的数,而且题目还保证只有一个只出现一次的数。
我们可以这样想既然只有这一个,那么其他数出现偶数次。联想到异或运算,比如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; }