编程珠玑习题:数字重复出现位图排序

内存限制,数字重复出现位图排序,每个数字限定最多出现10次

#include
#include
#include
#include"time.h"
using namespace std;
#define N 10000
#define NGROUP 5//一个数需要保存两个信息,1bit数值信息,4bit个数信息
#define BITSTEP 32
#define MASK 0x1F
#define shift 5
#define shiftnum 3//4bit保存一个数字出现的次数
#define MEMORY 100//内存限制
#define N_S (MEMORY*8/NGROUP) //按照数字范围处理,每趟能处理的数字范围,即每趟能处理多少个数
#define COUNT (N/N_S+1) //需要多少趟
//#define COUNT(N,MEMORY) ((N)/((MEMORY) * 8) + 1)

//#define NNUM_S (NNUM/COUNT)
int bit[N_S/BITSTEP+1];//保存数字
int bitnum[N_S*4/BITSTEP+1];//保存数字出现的次数
/****************
数字没出现一次计数加1,当出现次数超过15次时,报错
*/
void add(int i)
{
    int tmp=bitnum[i>>shiftnum]&(0xF<<((i&0x7)*4));

	tmp=tmp>>(((i&0x7)*4));
	if(tmp==0xF)
	{
		cerr<<"num over flow:  "<>shiftnum]+=(1<<((i&0x7)*4));
	cout<<"num   "<>shiftnum]<>shiftnum]&(0xF<<((i&0x7)*4));
	 return tmp>>((i&0x7)*4);
}
void clr(int i,int * bit_temp)
{
	bit_temp[i>>shift]&=~(1<<(i&MASK));
}
void set(int i)
{
	bit[i>>shift]|=(1<<(i&MASK));
}
int test(int i)
{
	int tmp=bit[i>>shift]&(1<<(i&MASK));
	return tmp>>(i&MASK);
}
int main(void)
{
	
    
	string ifile,ofile;
	ifstream infile;
	ofstream outfile;
	int a;
	cin>>ifile;
	cin>>ofile;
	//cout<>a)
	{
		int count_num=0;
		//cout<=k*N_S&&a>shift]<


你可能感兴趣的:(C++)