关于rand(),一样的种子每次都产生不同的随机数……

时间:2021-04-20 10:49:12
ubuntu终端下进行的测试
#include<stdio.h>
#include<stdlib.h>
int main()
{
srand(1);
int i;
for(i=0;i<10;i++)
printf("返回的随机数是:%d\n",rand();
}

结果 关于rand(),一样的种子每次都产生不同的随机数……
如果改成取0到5之间的随机数 每次取得值就是一样的了
#include<stdio.h>
#include<stdlib.h>
int main()
{
srand(1);
int i;
for(i=0;i<10;i++)
printf("返回的随机数是:%d\n",rand()%5);
}

关于rand(),一样的种子每次都产生不同的随机数……
种子如果一样,则每次的序列不都一样么?

6 个解决方案

#1


srand(time(0));

#2


srand(time(0)); 用时间来初始化种子

#3


[root@localhost d]# ./a
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421
[root@localhost d]# ./a
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421

同样的种子得出同样的序列。
你的截图和我运行两次的结果对比,可以发现:你的第一个序列是不对的(可能代码不对或者不是相同的程序)。

#4


种子相同,每次调用rand()函数出来的随机数都是相同的,种子不同,rand()出来的随机就不会相同,一般种子多选用获取当前的时间,这样每次rand()的值都不会相同的

#5


应该是一样的。
基本上都是用系统时间做种子,不过这也是伪随机。

#6


srand((int)time(0));  

#1


srand(time(0));

#2


srand(time(0)); 用时间来初始化种子

#3


[root@localhost d]# ./a
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421
[root@localhost d]# ./a
1804289383
846930886
1681692777
1714636915
1957747793
424238335
719885386
1649760492
596516649
1189641421

同样的种子得出同样的序列。
你的截图和我运行两次的结果对比,可以发现:你的第一个序列是不对的(可能代码不对或者不是相同的程序)。

#4


种子相同,每次调用rand()函数出来的随机数都是相同的,种子不同,rand()出来的随机就不会相同,一般种子多选用获取当前的时间,这样每次rand()的值都不会相同的

#5


应该是一样的。
基本上都是用系统时间做种子,不过这也是伪随机。

#6


srand((int)time(0));