您的位置:首页 > 其它

ACM随笔----- 计蒜客 单独的数字

2016-06-14 23:33 253 查看
解决本题 可以采用2种方法

   第一  如下。

  第二 采用 位运算的方法

单独的数字

给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。
如:{1, 2, 1, 2, 1, 2, 7}, 找出7.
格式:
   第一行输入一个数n,代表数组的长度,接下来一行输入数组A
,(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。
要求:
   你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~


样例输入

4
0 0 0 5



样例输出

5


1 #include"iostream"
2 #define MAX 100000
3 using namespace std;
4
5 int main()
6 {
7     int n,tag,a[MAX];
8     scanf("%d",&n);
9     for(int i=0;i<n;i++)
10     {
11         scanf("%d",&a[i]);
12     }
13
14     for(int i=0;i<n;i++)
15     {
16         tag=0;
17         for(int j=0;j<n;j++)
18             if(a[i]==a[j])
19                 tag++;
20         if(tag==1)
21             printf("%d",a[i]);
22     }
23
24
25 }

第二种方法

#include<iostream>  
using namespace std;  
  
int main(){  
    int n;  
    cin >> n;  
    int b[32] = {};  
    int a;  
    while(n--){  
        cin >> a;  
        for(int i = 0; i < 32; ++i){  
            if(a & (1 << i)){  
                b[i] = (b[i] + 1) % 3;  
            }  
        }  
    }  
    int res = 0;  
    for(int i = 0; i < 32; ++i){  
        res += b[i] *(1 << i);  
    }  
    cout << res << endl;  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: