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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值