#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void h(){
srand((signed)time(NULL));
int a[3]={0,0,0};
int zu,wo;
zu=rand()%3;
printf(“zu=%d “,zu);
a[zu]=1;
wo=rand()%3;
printf(“wo=%d\n”,wo);
}
void main(){
for(int n=1;n<11;n++)
{
h();
}
}
运行结果,每次调用h()都会产生同样的随机数,如:
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
Press any key to continue
更改程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void h(){
int a[3]={0,0,0};
int zu,wo;
zu=rand()%3;
printf(“zu=%d “,zu);
a[zu]=1;
wo=rand()%3;
printf(“wo=%d\n”,wo);
}
void main(){
srand((signed)time(NULL));
for(int n=1;n<11;n++)
{
h();
}
}
则可正常产生随机数,问一下:
为何srand((signed)time(NULL));写在函数里面,每次调用会产生同样的随机数呢?
#include <stdlib.h>
#include <time.h>
void h(){
srand((signed)time(NULL));
int a[3]={0,0,0};
int zu,wo;
zu=rand()%3;
printf(“zu=%d “,zu);
a[zu]=1;
wo=rand()%3;
printf(“wo=%d\n”,wo);
}
void main(){
for(int n=1;n<11;n++)
{
h();
}
}
运行结果,每次调用h()都会产生同样的随机数,如:
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
zu=2 wo=1
Press any key to continue
更改程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void h(){
int a[3]={0,0,0};
int zu,wo;
zu=rand()%3;
printf(“zu=%d “,zu);
a[zu]=1;
wo=rand()%3;
printf(“wo=%d\n”,wo);
}
void main(){
srand((signed)time(NULL));
for(int n=1;n<11;n++)
{
h();
}
}
则可正常产生随机数,问一下:
为何srand((signed)time(NULL));写在函数里面,每次调用会产生同样的随机数呢?
解决方案:5分
嗯,对的,这就是根据时间来决定的,时间太短,值一样
解决方案:10分
原因是 time 求得的时间粒度太大
你多次调用同一个函数,时间还没来得及变化。
结果是每次产生同一个序列
随机数发生器,是一种遍历一定范围整数 的算法
似乎应该叫,伪随机序列生成器。
本人所说的同一程序,两次执行,
指的是
生成的可执行文件。
执行两次,
由于时间差太小,以至于看到的结果相同。
time 似乎是秒级的
你多次调用同一个函数,时间还没来得及变化。
结果是每次产生同一个序列
随机数发生器,是一种遍历一定范围整数 的算法
似乎应该叫,伪随机序列生成器。
本人所说的同一程序,两次执行,
指的是
生成的可执行文件。
执行两次,
由于时间差太小,以至于看到的结果相同。
time 似乎是秒级的
解决方案:5分
time()的时间默认是以秒为单位的。两次执行的时间间隔太短,随机种子会相同。
代码示例:
代码示例:
#include <ctime> #include <cstdio> #include <windows.h> int main() { int length = 10; for(int i = 0; i < length; i++) { __int64 out = time(NULL); printf("%ld\n", out); Sleep(500); //注释这一句对照运行下 } return 0; }
有关time函数的说明,请见:http://www.cplusplus.com/reference/ctime/time/?kw=time