原题连接:
http://acm.hdu.edu.cn/showproblem.php?pid=2095
题意:
给你n个数(n为奇数)找出不同与其他数的数(说白了就是:找出只出现一次的数);
思路:
(1)排序一下,令d=a[0];
(1)从a[1]开始判断,a[i](i=1,2,...,n)与d是否相等,相等就让d=a[i+1],然后i++(i++是为了防止一个数与自身比较);
代码:
1 #include<cstdio> 2 #include<string> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 7 using namespace std; 8 9 int a[1000000]; 10 11 int main() 12 { 13 int n,i; 14 while(scanf("%d",&n)&&n!=0) 15 { 16 int d; 17 for(i=0;i<n;i++) 18 scanf("%d",&a[i]); 19 sort(a,a+n); 20 d=a[0]; 21 for(i=1;i<n;i++) 22 { 23 if(a[i]==d) 24 { 25 d=a[++i]; 26 } 27 else //当d与a[i]不相等时,d就是想要的; 28 break; 29 } 30 printf("%d\n",d);//后来想了想有bug 比如数据 7 1 1 1 2 3 3 3 31 } //可能是题意没说清:只有一个数只出现一次,其他的数成对出现!!! 32 return 0; 33 }
ps:开始用流输入超时了,找大神代码,发现了另一种方式:位运算;
出处:http://blog.sina.com.cn/s/blog_8fff62d30100x49p.html
代码:
1 #include<stdio.h> 2 int main() 3 { 4 int i,k,n,s; 5 while(scanf("%d",&n),n) 6 { 7 s=0; 8 for(i=0;i<n;i++) 9 { 10 scanf("%d",&k); 11 s^=k; 12 } 13 printf("%d\n",s); 14 } 15 }
---------------------------欢迎评论-----------------------------