⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 perfectrandom.cpp

📁 完美随机数
💻 CPP
字号:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

//随机数产生类
class clRandom
{
protected:
	int mRange;            //随机数的值域
	int mIndex;            //取出索引
	int *mTable;           //随机数表
	bool mAutoGenerate;    //是否自动产生随机数

public:
	//构建函数
	clRandom(unsigned int Range, bool AutoGen = false) : mRange(Range),
		mTable(NULL),
		mIndex(0),
		mAutoGenerate(AutoGen)
	{
		srand((unsigned)time(NULL));   //使用时间产生随机数字
		mRange = Range;
		mTable = new int [mRange];
		Generate();                    //产生随机数
	}

	//析构函数
	virtual ~clRandom()
	{
		if (mTable != NULL)
		{
			delete [] mTable;
			mTable = NULL;
		}
		mRange = 0;
	}

	//取出随机数
	int GetNumber(void)
	{
		int Number = -1;

		if (mRange > 0)
		{
			Number = mTable[mIndex];  //取出随机数
			++mIndex;                 //偏移取出随机数的指针
			if (mIndex >= mRange)
			{
				mIndex = 0;
				if (mAutoGenerate)    //是否重新产生随机数
				{
					Generate();       //产生随机数
				}
			}
		}

		return Number;
	}

	//随机数重整
	void Generate(void)
	{
		int loop, Offset;
		//建立连续数字
		for (loop = 0; loop < mRange; loop++)
		{
			mTable[loop] = loop;
		}
		//依照随机数改变数字的位置
		for (loop = 0; loop < mRange; loop++)
		{
			int Temp;
			//使用随机数选择要变换的数字
			Offset = (rand() % mRange) + loop;
			if (Offset >= mRange)
			{
				Offset -= mRange;
			}

			//将数字对调
			Temp = mTable[loop];
			mTable[loop] = mTable[Offset];
			mTable[Offset] = Temp;
		}

		mIndex = 0;
	}
};

int main(int argc, int argv[])
{
	clRandom *RandMaker;
	int      loop, Range = 20;

	RandMaker = new clRandom(Range);

	for (int times = 0; times < 5; times++)
	{
		printf("第 %d 组\n", times);
		for (loop = 0; loop < Range; loop++)
		{
			printf(" %d", RandMaker->GetNumber());
		}
		printf("\n\n");

		RandMaker->Generate();
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -