利用系统时间产生随机数,居然会一模一样?

dongcat111 2002-11-15 08:18:46
比如:a[5],b[5]数组都调用了随机函数来产生它的元素
create( int c[], int n )
{
srand( ( unsigned int ) time(0) )
for ( int i = 0 , i < n, i++ )
{
c[i] = rand( ) ;
}
}

create( a , 5 ) ;
create( b , 5 ) ;
运行两次creat,结果两个数组居然是一样的元素。
难道说系统时间间隔不够?
...全文
315 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongcat111 2002-11-15
  • 打赏
  • 举报
回复
其实我也考虑到调用时间间隔太短的问题,所以我的另外一个程序里面。
在两个create之间间隔加了个别cout语句,但是好象没什么效果……
双杯献酒 2002-11-15
  • 打赏
  • 举报
回复
您两次的time(0)得到的是相同的结果!
你可以把它显示出来看!
因为连续调用的时间太短.

程序
#include <iostream>
#include <time.h>
using namespace std;

int create( int c[], int n )
{
int t=time(0);
srand(t);
for ( int i = 0 ; i < n; i++ )
{
c[i] = rand( ) ;
}
return t;
}

int main()
{
int t1,t2;
int a[5],b[5];
t1=create( a , 5 ) ;
t2=create( b , 5 ) ;
cout<<"t1="<<t1<<endl;
cout<<"t2="<<t2<<endl;
cout<<"a[X]="<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl;
cout<<"b[X]="<<b[0]<<" "<<b[1]<<" "<<b[2]<<" "<<b[3]<<" "<<b[4]<<endl;
return 0;
}

运行结果:
t1=1037323348
t2=1037323348
a[X]=4076 8272 4176 32055 24187
b[X]=4076 8272 4176 32055 24187

您可以把
srand( ( unsigned int ) time(0) )
改成
static int t=0;
if(t==0)
{
t=time(0);
srand(t);
}
dongcat111 2002-11-15
  • 打赏
  • 举报
回复
如果srand放在函数外,是不是整个main只产生了一个随机种子?
那么子函数里面的rand每次都用这个种子,算出来的仍可以不同?
MoQi_123 2002-11-15
  • 打赏
  • 举报
回复
用srand产生随机种子
用rand产生随机数
phoenix_gao 2002-11-15
  • 打赏
  • 举报
回复
这是系统产生伪随机数的算法问题
dongcat111 2002-11-15
  • 打赏
  • 举报
回复
果然!能否解释一下为什么?
sunsuny 2002-11-15
  • 打赏
  • 举报
回复
srand( ( unsigned int ) time(0) )移出函数体
create(a,5)
create(b,5)
dongcat111 2002-11-15
  • 打赏
  • 举报
回复
我得到的是随机数,只不过两个数组的随机数一样而已。
E17 2002-11-15
  • 打赏
  • 举报
回复
你得到的都是什么数字啊? 是不是都是0

这会不会和 你定义他们是int 型有关,你 再看看!
MoQi_123 2002-11-15
  • 打赏
  • 举报
回复
没有的事。
用srand产生随机种子。可以在窗体初始化时进行。
以后产生的随机数不会有什么规律了。
在窗体类的OnInit里写下
//产生随机种子
CTime tRandTime=CTime::GetCurrentTime();
unsigned int iRandTime=tRandTime.GetTime();
srand((unsigned int)iRandTime);
在要得到随机数的地方写下
iRand=rand();//写产生随机数
就OK了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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