zoukankan      html  css  js  c++  java
  • srand函数

    srand函数是随机数发生器的初始化函数。
      原型:void srand(unsigned seed);
      用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。srand((int)getpid()); 使用程序的ID(getpid())来作为初始化种子,在同一个程序中这个种子是固定的。
    追问
    srand(1)直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化//初始化为srand(0)呢?也会随机数重复?你说的重复是 重复出现初始化的数?所以传时间进去,
    要是随即时间,传数进去?
    上面程序要改成srand((unsigned) time(&t));//直接加上这句就行?
    回答
    电脑的随机数都是伪随机,也就是通过一定的算法得出一个数列,然后每 rand()一次就取一个数。
    而srand()的功能就是就是设置产生随机数的公式的参数(随机数种子),如果使用相同的种子,那么得到的随机数也就是相同的。自然,如果使用不同的种子,得出的随机数序列也是不同的。
    不同的种子会得到 固定 的 不同的随机数序列。

    例如:
    void main()
    {
    srand(1);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    srand(1);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    srand(2);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    srand(2);
    cout<<rand()<<endl;
    cout<<rand()<<endl;
    }
    输出结果:
    41
    18467
    41
    18467
    45
    29216
    45
    29216
    由于通过srand(1)和srand(2)设置了不同的随机数种子
    搜索

    所以产生了两组不同的随机数,这组数与种子相对应。

    那么怎么利用rand产生真正的“随机数”呢?
    答案是通过srand(time(NULL))使得随机数种子随时间的变化而变化。
    PS:time函数可以获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。
  • 相关阅读:
    Poj 2406--Power Strings(KMP)
    杭电2682--Tree(Prim)
    杭电1827--Summer Holiday(SCC + 缩点)
    杭电2181--哈密顿绕行世界问题(Dfs)
    杭电1269--迷宫城堡(强连通分量)
    南阳21--三个水杯(Bfs)
    杭电1203--I NEED A OFFER!(01背包)
    e.send和next(e)的区别
    python中yield与return的用法与区别
    迭代器
  • 原文地址:https://www.cnblogs.com/ghostTao/p/3967916.html
Copyright © 2011-2022 走看看