📄 perfectrandom.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 + -