統計ビット数


例1:ランダム関数で100個の数を生成し、設計プログラム統計個位で0、1、2、3、4、5、6、7、8、9の数字はそれぞれいくらありますか.
【分析】これは基本的なアルゴリズム問題です.C++のランダム関数を用いて100個の乱数を生成するには,各数のビット数をどのように取得するかが重要である.
私たちは数字が10進数で構成されていることを知っています.各数字を10で割って、得られた余剰数はビット上の数字です.たとえば、数値123は10に対して3、すなわち123%10=3を余す.
完全なコードは次のとおりです.
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define MAX 101

//       
void input(int num[])
{
	int i;
	srand((unsigned)time(NULL)); //        
	for (i=1;i<MAX;i++)
	{
		num[i]=rand()%100; //  100      
	}
}

//       
void output(int num[])
{
	int i;
	for(i=1;i<MAX;i++)
	{
		cout<<num[i]<<"  ";
		if (0 == i%10) //   10   
		{
			cout<<endl; //  
		}		
	}
	cout<<endl;
}

//      
void cal_num(int num[],int count[])
{
	int i,mod;
	for(i=1;i<MAX;i++)
	{
		mod=num[i]%10; // 10  ,      
		count[mod]++;
	}
}

void main()
{
	int num[MAX];
	int i,count[10];

	memset(count,0,10*sizeof(int));//   count[]  10    0

	input(num);
	cout<<"100 num: "<<endl;
	output(num);

	cal_num(num,count);
	for (i=0;i<10;i++)
	{
		cout<<i<<":"<<count[i]<<endl;
	}

}

効果は次のとおりです.