原题连接:

  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 }        

---------------------------欢迎评论-----------------------------