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

#include

#define N 10

int main() 

{

int a[N] = {222,115,810,100,115,810,222,222,810,115};

int i, j, count, len = 8 * sizeof(int), p = 1, n = 0;

//
对每个元素的每个二进制位进行累加,int 型有二进制位 32位 

for(i = 0; i < len; i ++)

{

count = 0;

for(j = 0; j < N; j ++)

{

//
若元素已为 0,那跳过,直接进行下一个元素运算 

if(a[j] == 0)

{

continue;

}

//
对每个二进制位进行累加 

count = count + ((a[j]) & 1);

//
将元素右移一位,为下次循环做准备 

a[j] = a[j] >> 1;

}

//
只出现一次的元素的二进制位都是 3的余数 

n = n + p * (count % 3);

p = p * 2;

}

printf(“%d\n”, n);

return 0;

}

点赞