杭电oj刷题(2095)

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 
0

Sample 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;
}
发布了76 篇原创文章 · 获赞 3 · 访问量 1854

猜你喜欢

转载自blog.csdn.net/ZhangShaoYan111/article/details/104343593