代码之家  ›  专栏  ›  技术社区  ›  Chandan Shetty SP

随机数生成

  •  4
  • Chandan Shetty SP  · 技术社区  · 15 年前

    我用下面的代码生成范围内的随机数…

    int randomNumberWithinRange(int min,int max)
    {
            int snowSize = 0;
            do
            {
                snowSize = rand()%max;
            }
            while( snowSize < min || snowSize > max );
            return snowSize;
        }
    
    for(int i = 0; i < 10 ; i++)
      NSlog("@"%d",\t", randomNumberWithinRange(1,100));
    

    如果我退出应用程序并重新启动,就会生成相同的数字集。如何为每次发射生成不同的随机数集。

    6 回复  |  直到 13 年前
        1
  •  11
  •   phimuemue    15 年前

    做一些像这样的事情 srand(time(NULL)) ,即与时间同步(当然是在程序初始化过程中)。

        2
  •  4
  •   Danvil    15 年前

    您必须使用所指出的种子初始化随机数生成器。

    此外,应避免出现以下循环:

    int randomNumberWithinRange(int min,int max)
    {
      return min + rand() % (max - min + 1);
    }
    
        3
  •  3
  •   RC.    15 年前

    您需要为随机数生成器种子。

    从手册页:

    函数srand()使用参数 作为新序列的种子 要返回的伪随机数 随后调用rand()。如果 然后使用相同的函数调用srand()。 种子值,序列 伪随机数应为 重复的。如果在前面调用rand()。 对srand()的任何调用都会 应生成相同的序列 当使用 种子值为1。

        4
  •  3
  •   Jasarien    15 年前

    你应该考虑使用 arc4random 而不是 rand 因为很多原因,其中之一是 ARC4-随机 不需要播种。

        5
  •  0
  •   Software_Designer    13 年前

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

    #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;
    
        6
  •  -1
  •   frankc    15 年前

    除了使用srand()播种随机数生成器之外,这里的一般技术也不太正确。首先,你不应该使用模量来切割兰德范围。这类用户的低阶位随机性较小。第二,不需要循环。你可以直接得到范围。以下是操作方法:

    雪的大小=最小值+(int)(最大值*(rand()/(rand_max+1.0));