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个左右时就会出现重复一样的数据,一开始我无法检测到,苦恼了好久,其实这个犯的错误就是前面提到的。

  • 相关阅读:
    ansible plugins 列表
    ansible common modules
    CentOS 7.3降低内核版本为7.2
    ansible ad-hoc 参考
    kafka监控工具kafka-manager
    zookeeper监控之taokeeper
    linux的ulimit各种限制之深入分析
    docker版的zabbix部署
    kubernetes介绍(1)
    部署k8s时容器中ping不通
  • 原文地址:https://www.cnblogs.com/xiaoaiyi/p/3302591.html
Copyright © 2011-2022 走看看