我有一个使用随机生成器创建多维数据集的c ++程序。要创建多维数据集,我有:
void generateSquare() {
int num = 0;
srand(time(NULL));
for (int r = 0; r < MSQUARE; r++) {
for (int c = 0; c < MSQUARE; c++) {
do {
num = (rand() % (MSQUARE * MSQUARE)) + 1;
} while (!checkUnique(num));
cube[r][c] = num;
}
}
}
它只允许生成一个数字。然后将此函数包装在do..while循环中,这样如果正方形不满足特定条件,则会生成一个新的正方形,直到生成满足条件的正方形为止。
问题在于它不断地反复生成相同的方块。我认为srand(time(NULL))将为rand()函数设定种子,这样每次调用时它都会生成不同的随机数,以创建一个新的唯一正方形,但看起来似乎没有发生。
void checkSquare() {
do {
generateSquare();
} while (!perfect);
}
这不是实际的do ... while循环,但可以让你了解它是如何被调用的。
如何确保种子每次都是独一无二的?
答案 0 :(得分:2)
您应该在程序开头只调用srand
一次。种子始终相同的原因是因为time
返回了几秒钟。由于你在一个循环中调用它,它总是具有相同的值(直到一秒钟过去)。
此外,如果你可以使用C ++ 11或更高版本,你应该查看标准库中的pseudo-random number generation
答案 1 :(得分:0)
srand设置rand函数的种子。如果将其设置为特定数字,它将始终返回相同的数字序列。如果要测试程序,则使用此方法,否则使用rand()而不使用srand()。