C++ 一种随机数生成器,可在

C++ 一种随机数生成器,可在,c++,random,C++,Random,启动时,只需使用srand对生成器进行一次种子设定,然后调用rand函数。如果使用相同的种子对生成器进行两次种子设定,每次都会得到相同的值。您只需要使用sr对生成器进行一次种子设定,然后在启动时调用rand函数即可。如果使用同一种子对生成器进行两次种子设定,每次都会得到相同的值。听起来像是这样: int get_rand() { srand(time(0)); return rand(); } int get_rand() { return rand(); } 这可以

启动时,只需使用srand对生成器进行一次种子设定,然后调用rand函数。如果使用相同的种子对生成器进行两次种子设定,每次都会得到相同的值。

您只需要使用sr对生成器进行一次种子设定,然后在启动时调用rand函数即可。如果使用同一种子对生成器进行两次种子设定,每次都会得到相同的值。

听起来像是这样:

int get_rand() {
    srand(time(0));
    return rand();
}
int get_rand() {
    return rand();
}
这可以解释为什么你在一秒钟内得到相同的数字。但你必须这样做:

int get_rand() {
    srand(time(0));
    return rand();
}
int get_rand() {
    return rand();
}

并在程序启动时调用srand一次。

听起来您是这样做的:

int get_rand() {
    srand(time(0));
    return rand();
}
int get_rand() {
    return rand();
}
这可以解释为什么你在一秒钟内得到相同的数字。但你必须这样做:

int get_rand() {
    srand(time(0));
    return rand();
}
int get_rand() {
    return rand();
}

并在程序启动时调用srand一次。

您应该只为PRNG设定一次种子。

您应该只为PRNG设定一次种子。

如果生成大量随机数,您可以尝试使用XORShift生成器。对于长8位:

// initial setup
unsigned long x = ... init from time etc ...
// each time we want a random number in 'x':
x ^= x << 21;
x ^= x >> 35;
x ^= x << 4;

如果要生成大量随机数,可以尝试使用XORShift生成器。对于长8位:

// initial setup
unsigned long x = ... init from time etc ...
// each time we want a random number in 'x':
x ^= x << 21;
x ^= x >> 35;
x ^= x << 4;

有多种非常好的随机数生成器。

有多种非常好的随机数生成器。

此代码只生成一次唯一的随机数

#include <ctime>
# include <iostream>
using namespace std;


int main()
{

      int size=100;
      int random_once[100];
      srand(time(0));

      for (int i=0;i<size;i++)  // generate unique random number only once
      {
          random_once[i]=rand() % size;
          for(int j=0;j<i;j++) if (random_once[j]==random_once[i]) i--;   
      }

      for ( i=0;i<size;i++) cout<<" "<<random_once[i]<<"\t";

  return 0;

此代码只生成一次唯一的随机数

#include <ctime>
# include <iostream>
using namespace std;


int main()
{

      int size=100;
      int random_once[100];
      srand(time(0));

      for (int i=0;i<size;i++)  // generate unique random number only once
      {
          random_once[i]=rand() % size;
          for(int j=0;j<i;j++) if (random_once[j]==random_once[i]) i--;   
      }

      for ( i=0;i<size;i++) cout<<" "<<random_once[i]<<"\t";

  return 0;

利特,没有你我该怎么办!非常感谢,我觉得这是另一个“应该知道得更好”的程序员造成的错误!利特,没有你我该怎么办!非常感谢,我觉得这是另一个“应该知道得更好”的程序员造成的错误!