zoukankan      html  css  js  c++  java
  • 一个数组除了一个元素只出现一次,其他元素全都出现了三次,输出出现一次的元素

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


    左移位就是比如二进制 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);
    28 return 0;
    29 }
  • 相关阅读:
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    面向对象第四单元总结
    面向对象第三单元总结
    面向对象第二单元的总结
    操作系统lab3实验总结
    操作系统lab2实验总结——Part2
    操作系统lab2实验总结——Part1
  • 原文地址:https://www.cnblogs.com/dshn/p/9579185.html
Copyright © 2011-2022 走看看