hdu2095 http://acm.hdu.edu.cn/showproblem.php?pid=2095 题目大意就是找到那个有奇数个的数字; 先把异或的特性贴出来; */ 1、a^b = b^a。 2、(a^b)^c = a^(b^c)。 3、a^b^a = b。 对于一个任意一个数n,它有几个特殊的性质: 1、0^n = n。 2、n^n = 0。 所以可以通过每次异或运算,最后剩下的值就是出现奇数次的那个数字。 /* 代码;
/* 1、a^b = b^a。 2、(a^b)^c = a^(b^c)。 3、a^b^a = b。 对于一个任意一个数n,它有几个特殊的性质: 1、0^n = n。 2、n^n = 0。 所以可以通过每次异或运算,最后剩下的值就是出现奇数次的那个数字。 */ #include<stdio.h> int main() { int n, i, ans,a; while(~scanf("%d",&n)&&n!=0) { ans = 0; for(i = 0; i < n; i++) { scanf("%d",&a); ans^=a;//本身与本身异或等于0; } printf("%d\n",ans); } return 0 ; }还有一种用set的做法;也贴出来吧;;
#include <set> #include <stdio.h> using namespace std; int main() { int n,x; set <int> S; while(scanf("%d",&n),n) { while(n--) { scanf("%d",&x); if(S.find(x) == S.end()) //没找到,插入 S.insert(x); else //找到了,删除 S.erase(x); } printf("%d\n",*S.begin()); S.clear(); } return 0; }