题目大意:在输入的数列中 找唯一出现奇数次的一个数。
一开始没看到memory limit 直接开了个100000的int数组 然后排序 找出在奇数数位置上与下一位不同的数。
网上的大牛们还是那么牛 巧妙地用异或运算 还有用map映射
复习下异或~
0^0 =0
0^1=1
1^0=1
1^1=0
可以发现 任何数异或0还是他本身。
一个数异或另一个数偶数次还是他本身。奶奶的,这思路。。。我在看看映射去。。。
#include <stdio.h> //题目中Odd 是奇数的意思 int main() { int num,n,result,i; while(scanf("%d",&n),n){ result=0; for(i=0;i<n;++i){ scanf("%d",&num); result^=num;//异或 } printf("%d/n",result); } return 0; }
MAP STL解释链接:
http://baike.baidu.com/view/95826.htm#9
MAP版本:
/Map版本 //Coded by 代码疯子 #include <iostream> #include <cstdio> #include <map> using namespace std; int main() { int n, i, t; while(EOF != scanf("%d", &n), n) { map<int, int> v; for(i = 0; i < n; ++i) { scanf("%d", &t); ++v[t]; } map<int, int>::iterator iter; for(iter = v.begin(); iter != v.end(); ++iter) { if(iter->second == 1) { printf("%d/n", iter->first); break; } } } return 0; }