zoukankan      html  css  js  c++  java
  • 编程珠玑第一章

    
    
    整个程序的思想就是:
                1.每个整数有32位,那么它就可以表示32个数,分别对应每bit位为1.
                2.然后把10000000个数分为1+N/BITSPERWORD组(相当于有这么多个桶),每组包含接近32个数。
    上面的解释可能仍不到位,那我们来看具体的函数:
     
    对于set函数,我们可以这样理解,
                 arr[i>>SHIFT] |= (1<<(i&MASK))可以转化为
                 arr[i/32] = arr[i/32] | (1<<(i%32))
    i%32必然处于区间[0, 31],那么1<<(i%32)就是将bit位1向前移动(i%32)位,然后和arr[i/32]相或,因而arr[i/32]的第(i%32)位就为1.

    #include <stdio.h> #define BITPERWORD #define MASK 0x1F #define N 10000000 #define SHIFT 5 int a[N/BITPERWORD + 1]; void clr_bit(int i){a[i>>SHIFT] &= ~(1 << i & MASK);} void set_bit(int i){a[i>>SHIFT] |= 1<<(i & MASK);} int test_bit(int i){ return a[i >> SHIFT] & (1 << (i & MASK));} int main() { int i = 0; FILE * in = freopen("in.txt","r",stdin); FILE * out = freopen("out.txt","w",stdout); while (scanf("%d",&i) != EOF) { set_bit(i); } for (i = 0;i < 100000 ;++i) { if(test_bit(i)) printf("%d ",i); } fclose(in); fclose(out); //printf("%d ",tmp); return 0; }
  • 相关阅读:
    eclipse中的项目的JRE换成JDK
    Eclipse中maven项目的创建和运行
    git 发布命令
    vbox中虚拟ubuntu增加新的虚拟硬盘
    MyServer
    java常用的中间件
    高并发解决方案
    浅谈SpringMVC
    浅谈HIbernate
    javaweb笔记七
  • 原文地址:https://www.cnblogs.com/liuweilinlin/p/3180539.html
Copyright © 2011-2022 走看看