srand(time(NULL)),我不理解种子的含义,能说下吗

cinderella_m 2007-07-08 02:54:52
求100以内5个不同的随机数。。正确的代码是下面的:
int main()
{
srand(time(NULL));
for(int i=0; i<5; i++)
{
cout << rand()%100<< endl;}

}
我认为srand(time(NULL))是不是应该放到循环里面?时间每次都是不一样的,每次循环的时候应该都在执行一下srand(time(NULL))呢。
...全文
5160 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
美女宝贝 2012-04-24
  • 打赏
  • 举报
回复
6楼也有问题啊 sleep本身单位是second,然后你那个太大了 你不信去试试,上面所有的同志讲的不错,兄弟学习了 呵呵
jolong 2008-06-03
  • 打赏
  • 举报
回复 4
把srand(time(NULL)) 放到循环体内的话 其time(NULL) 得到的数是一样的
因为 time(NULL)的时间只是精确到秒 但是上面FOR循环一次的时间根本不用一秒
也就是说 srand()中的种子 你重新设置成一样的了
这样的话 下面 rand() 产生的随机数 必定是一样的

如果把srand()放到循环外面 它在循环中 只设置了一次种子
这样rand()产生的随机数序列将不同

上面使用 SLEEP(10) 是不够的~ 至少得1秒钟
也就是sleep(1000)
yoyo_sky 2007-07-08
  • 打赏
  • 举报
回复
to :alwaysLonely(不算特别笨),如果将srand(time(NULL))放到循环体内的话,产生的5个数是一样的,你可以试一下。。。
believefym 2007-07-08
  • 打赏
  • 举报
回复 1
种子只要一个即可,这样程序在一次执行过程中产生的数可以看作随机数
如果每次都重新设置种子,由于种子都一样,产生的数也会一样,就没有随机性可言了

而用时间做种子,由于时间的唯一性,能保证程序做【两次执行】中的随机数序列不相同
jixingzhong 2007-07-08
  • 打赏
  • 举报
回复
可以这样:

for(int i=0; i<5; i++)
{
sleep(10); //这样延迟时间,可以达到srand设置不同种子的目的
srand(time(NULL));
cout << rand()%100<< endl;

}

当然,完全没有必要这样,只是解释个原理....
jixingzhong 2007-07-08
  • 打赏
  • 举报
回复
程序执行的速度是很快的,
在循环内部死 srand 其实是在使用同一个种子。
【注意time的精度】

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧