find your present (2)
题目描述:
在新年聚会上,所有人都会收到一份特殊的礼物。选择轮到你领取自己的礼物了。在桌子上有一大堆礼物,其中只有一个是你的。每个礼物上都标有一个号码。而你的礼物的号码是与其他所有礼物都不相同的。你可以假定只有一个数字只出现一次。例如,现在有5个礼物,他们分别标号伪1,2,3,2,1。所以,你的礼物就是标号为3的那个。因为3只出现了1次。
Input
The input file will consist of several cases.
Each case will be presented by an integer n (1<=n<1000000, and n is odd) at first. Following that, n positive integers will be given in a line, all integers will smaller than 2^31. These numbers indicate the card numbers of the presents.n = 0 ends the input.Output
For each case, output an integer in a line, which is the card number of your present.
Sample Input
5 1 1 3 2 2 3 1 2 1 0Sample Output
3 2
分析:
可用枚举,分别计算出每个数出现的次数,然后输出出现奇数次的数,不过这样比较麻烦。c语言可用异或运算来解决此问题。
通过答案:
#include <stdio.h>
int main()
{
int n,m,f;
while(scanf("%d\n",&n)!=EOF){
if(n==0)break; //若输入为0,则结束
scanf("%d",&f); //输入第一个数
n=n-1;
while(n--){ //输入剩下的数
scanf("%d",&m);
f^=m; //对输入的数进行异或,若相同则为0,相异则为1
} //f^0=f ,f^f=0
printf("%d\n",f); //最后答案为那个多余的数
}
return 0;
}