一个数组除了一个元素只出现一次,其他元素全都出现了三次,输出出现一次的元素

一个数组除了一个元素只出现一次,其他元素全都出现了三次,输出出现一次的元素


左移位就是比如二进制 0000 1011 左移一位就是 0001 0110,相当于乘2
右移位类似, 0000 1011 右移一位就是 0000 0101,相当于除2   (去掉了最低位)

 1 #include <stdio.h>
 2 #define N 10
 3 int main() 
 4 {
 5 int a[N] = {222,115,810,100,115,810,222,222,810,115};
 6 int i, j, count, len = 8 * sizeof(int), p = 1, n = 0;
 7 // 对每个元素的每个二进制位进行累加,int 型有二进制位 32位 
 8 for(i = 0; i < len; i ++)   //对每个数的每一位分别累加
 9 {
10 count = 0;
11 for(j = 0; j < N; j ++)
12 {
13 // 若元素已为 0,那跳过,直接进行下一个元素运算 
14 if(a[j] == 0)
15 {
16 continue;
17 }
18 // 对每个二进制位进行累加 
19 count = count + ((a[j]) & 1);
20 // 将元素右移一位,为下次循环做准备 
21 a[j] = a[j] >> 1;
22 }
23 // 只出现一次的元素的二进制位都是 3的余数 
24 n = n + p * (count % 3);
25 p = p * 2;
26 }
27 printf("%d\n", n);
28 return 0;
29 }

 

posted @ 2018-09-03 16:24  Lincy*_*  阅读(1310)  评论(0编辑  收藏  举报