种子随机数生成器不工作 我有一个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; } } }

种子随机数生成器不工作 我有一个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; } } },c++,random,C++,Random,这不是实际的do…while循环,但可以让您了解如何调用它 如何确保每次种子都是唯一的?您应该在程序开始时只调用一次srand。种子总是相同的原因是time返回秒数。因为在循环中调用它,所以它总是具有相同的值(直到一秒钟过去) 此外,如果可以使用C++11或更高版本,则应查看标准库中的,并设置rand函数的种子。如果将其设置为特定的数字,它将始终返回相同的数字序列。如果您想测试一个程序,您将使用它,否则您将使用rand()而不使用srand() 来自该链接:“如果seed设置为1,则生成器将重新

这不是实际的do…while循环,但可以让您了解如何调用它


如何确保每次种子都是唯一的?

您应该在程序开始时只调用一次
srand
。种子总是相同的原因是
time
返回秒数。因为在循环中调用它,所以它总是具有相同的值(直到一秒钟过去)


此外,如果可以使用C++11或更高版本,则应查看标准库中的,并设置rand函数的种子。如果将其设置为特定的数字,它将始终返回相同的数字序列。如果您想测试一个程序,您将使用它,否则您将使用rand()而不使用srand()


来自该链接:“如果seed设置为1,则生成器将重新初始化为其初始值,并生成与任何rand或srand调用之前相同的值。”因此,除非您希望它生成相同的值,否则您需要为程序的每次运行使用不同的值调用srand(因此调用
time
)。对时间的调用不正确,因此种子值不同。程序可以运行一分钟,种子值没有变化,这就是为什么我使用时间,我认为这是使用rand()的标准,因为没有两个时间是相同的,它应该在每次需要生成种子时进行播种,但时间没有变化。
void checkSquare() {
  do {
    generateSquare();
  } while (!perfect);
}