标签:
1 //map 2 #include <set> 3 #include <stdio.h> 4 using namespace std; 5 int main() 6 { 7 int n,x; 8 set <int> S; 9 while(scanf("%d",&n),n) 10 { 11 while(n--) 12 { 13 scanf("%d",&x); 14 if(S.find(x) == S.end()) //没找到,插入 15 S.insert(x); 16 else //找到了,删除 17 S.erase(x); 18 } 19 printf("%d\n",*S.begin()); 20 S.clear(); 21 } 22 return 0; 23 }
1 //排序 2 3 #include <cstdio> 4 #include <algorithm> 5 #include <iostream> 6 #include <cstdlib> 7 using namespace std; 8 9 long long int a[1000010]; 10 11 int main() 12 { 13 int n; 14 while (scanf("%d",&n) && n) 15 { 16 for (int i = 0; i<n; i++) 17 scanf("%lld",&a[i]); 18 sort(a, a+n); 19 int i; 20 for (i = 1; i<n; i++) 21 { 22 if (a[i] != a[i-1] && a[i] != a[i+1]) 23 break; 24 } 25 printf("%lld\n",a[i]); 26 } 27 return 0; 28 }
1 #include <math.h> 2 #include <string.h> 3 #include <algorithm> 4 #include <stdio.h> 5 long a[100000100]; 6 int main() 7 { 8 9 memset(a,0,sizeof(a)); 10 long n; 11 while(scanf("%ld",&n)!=EOF&&n!=0) 12 { 13 long long m; 14 for(int i=0;i<n;i++) 15 { 16 scanf("%lld",&m); 17 a[m]+=1; 18 } 19 for(int i=0;i<100000100;i++) 20 { 21 if(a[i]==1) 22 { 23 printf("%lld\n",i); 24 } 25 } 26 } 27 return 0; 28 }
其实,这题还有个更好的方法————位异或。
我们先了解一下位异或的运算法则吧:
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 #include <stdio.h> 2 int main() 3 { 4 int n,x,ans; 5 while(scanf("%d",&n),n) 6 { 7 ans = 0; 8 while(n--) 9 { 10 scanf("%d",&x); 11 ans ^= x; 12 } 13 printf("%d\n",ans); 14 } 15 return 0; 16 }
标签:
原文地址:http://www.cnblogs.com/wangmengmeng/p/4636473.html