位图代码

    xiaoxiao2021-12-03  15

    //题目的意思:在100个数中,找出出现重复次数是2的数字,注意重复的次数不超过3次 #include <stdio.h> int main() { unsigned int a[100]; for(int i=0;i<100;i++) //借助for循环,输入100个数 a[i]=i; a[99]=0; int h[10]={0}; //定义位图数组,h[0]占用4个字节,32位。分别用两位来统计每一个关键字出现的次数(比如00,01,10,11),位图初始化为00 //h[0]是32位,每一个关键字出现次数占两位,所以一个h[0]可以统计关键字0-15出现的次数,比如关键字0出现一次,则在h[0]的头两位&3 for(int i=0;i<100;i++) { int m= a[i]/16; //m找到大数组h[m] int n =a[i]; //找到h[m]后,通过a[i]找到h[m]下的具体位置(h[m]下有16个存关键字的统计位) h[m] += (1<<(2*n)); //找到关键字的具体位置后,这个具体位置进行加1.n是代表关键字在h[m]下的具体位置,需要将1左移2*n if(((h[m]>>(2*n))&3) ==2) //每输入一个关键字先进行上面的统计后,再来判断重复次数是否为2。 { //单独是提取不出统计次数,因为关键字0-15,16-31等共享一个h[0],h[1]……他们是一连串的32位的二进制数据,要分别表示需要将他们向右移(2*n),并&3,得到某一关键字单独的统计次数 printf("%d ",a[i]); break; } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-679980.html

    最新回复(0)