Ligh7ninG
Ligh7ninG
采纳率100%
2016-09-05 14:43

关于srand函数的几个问题

5
已采纳

大二的软件狗,有几个问题一直不清楚,求教一下大神们
1. 一个特定的种子值只会产生一个特定的随机数,对吗?
2. 使用srand函数,用time(NULL)做种子值,这样的话种子值是随着电脑运行时间随时变化,而不取决于srand的函数在程序中的位置吗?
3. 变量直接用time(NULL)取的时候单位是秒,在srand这里取得是不是一个更小的单位?(微秒?还是什么)因为如果单位仍然是秒的话,那么我程序在1s内运行完成,产生的所有随机数岂不是一个值了?而我自己运行程序检测的则不是这样的。
4. 随机数取0到9,srand写在循环里面,然后得到的随机数都是1,4,7,这个数字差(3到4左右)是不是就是我循环一次的时间消耗?如果是的话,srand写在循环外,经过的时间都是一样的,那么得到的随机数为什么能全部取到0~9?

不好意思,问的可能有些混乱,先提前谢过了。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • FrankLi101000100 FrankLi101000100 5年前

    一个种子不是产生一个特定的随机数,而是一串特定的随机数。
    #include
    using namespace std;
    #include
    #include
    int main(){
    srand(5555);
    cout<<rand()<<" "<<rand()<<" "<<rand()<<endl;
    srand(5555);
    cout<<rand()<<" "<<rand()<<" "<<rand()<<endl;
    srand(6666);
    cout<<rand()<<" "<<rand()<<" "<<rand()<<endl;
    }
    运行结果:
    2438 11821 18178
    2438 11821 18178
    24893 25748 21806

    点赞 评论 复制链接分享
  • zhuzige521888 一个程序猿子 5年前

    srand()就是给rand()提供种子seed

    如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的,

    也就是说,以一个固定的数值作为种子是一个缺点。 通常的做法是 以这样一句代码srand((unsigned) time(NULL));来取代,这样将使得种子为一个不固定的数, 这样产生的随机数就不会每次执行都一样了。

    点赞 评论 复制链接分享
  • ndtcenter ndtcenter 5年前

    目前用 srand 和 rand 产生的随机数是伪随机数:是一个周期很长的数值系列r0,r1,r2,''',rN。可以认为srand()就是用来设置这个系列的起点,以后每调用一次rand,就取这个系列的后一个数。

    点赞 评论 复制链接分享
  • FrankLi101000100 FrankLi101000100 5年前

    首先,种子不会随着电脑运行时间变化。
    time(0)可以得到一个整数,代表函数调用时的时间。以这个整数作为种子,用srand初始化。
    之后每次调用rand()都是以刚才的srand所在时间为种子,直到第二次运行srand且种子数值改变
    若两次运行srand的种子一样,则会出现:
    每次调用rand()时,
    rand()(第一次srand)==rand()(第二次srand)

    点赞 评论 复制链接分享
  • qq_30084517 星空_祈愿 5年前

    srand函数是rand函数的种子,用来初始化rand()的起始值。用时间做种子只是每次初始值不一样罢了,具体生成的随机数还是有rand决定的,需要产生10(不包括10)以内的随机数对10求余(0-9)就可以得到

    点赞 评论 复制链接分享

相关推荐