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

来源:互联网 发布:mac修照片的软件 编辑:程序博客网 时间:2024/06/05 00:41

解决本题 可以采用2种方法

   第一  如下。

  第二 采用 位运算的方法


单独的数字

给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。

如:{1, 2, 1, 2, 1, 2, 7}, 找出7.

格式:

   第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。

要求:

   你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~

样例输入

40 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;  } 

1 0
原创粉丝点击