zoukankan      html  css  js  c++  java
  • c++产生随机数问题

    对于产生随机数的种子,一定要放在最外层函数,因为种子必须只有一个,也就是说如果你要产生N个随机数,也只需要一个种子,即srand(time(0));先举个简单的例子

    #define divisor   100

    int mian()

    {

      int number[100];

      srand(time(0));//一定要放在最外边,不能放在for循环里面,不然产生的随机数会重复等问题

      for(int i=0;i<sizeof(number)/sizeof(number[0]);++i)

        number[i]=rand%divisor;//使得产生的数在一个范围内,即0-99

      return 0;

    }

    上面是一个简单的例子,可能很多人都知道了,不会犯上面错误,但是问题是有些时候需要去层层调用各个函数,然后生成各个对象或者什么的,再初始化随机随机数,这就很容易犯这个错误了,也是我自己在做毕业设计时犯的错误。

    开始时我的程序大致是这样的:

    int main()

    {

      readInit();

      *******

    }

    void readInit()

    {

      initUers(path1);

      initUers(path2);

      initUers(path3);

      initUers(path4);

      initUers(path5);

      initUers(path6);

      initUers(path7);

    }

    void initUers(char *path)

    {

      srand(time(0));//应该把这句放在main()函数中的

      **********

      *********

    }

    然后这样就出现了比较隐蔽的问题了,我随机数产生多了,当要1000个左右时就会出现重复一样的数据,一开始我无法检测到,苦恼了好久,其实这个犯的错误就是前面提到的。

  • 相关阅读:
    [CF997E] Good SubSegment
    CF916E
    BZOJ2006 超级钢琴
    BZOJ4571
    凸包总结
    树形DP入门
    bzoj4300 绝世好题(位运算+DP)
    bzoj4552 [Tjoi2016&Heoi2016]排序 (线段树+二分)
    SP1716 GSS3
    Noip2009 Hankson 的趣味题 (简单数学)
  • 原文地址:https://www.cnblogs.com/xiaoaiyi/p/3302591.html
Copyright © 2011-2022 走看看