主题:关于随机函数的问题
yangqi506
[专家分:0] 发布于 2007-04-25 09:02:00
各位大大们~,
因为手头工作问题,需要在C下用随机函数产生数放入一个数组,然后用数组里的数整理成堆,然后进行优化堆排序,对于随机函数的产生原理我不是很清楚,在随机函数这个地方我卡住了~~那位大哥能指导下我吗?就是在C下如何用随机函数产生数(int型),再存入一个数组,在1-30000之间的数。。。[em8] 先谢了~~
回复列表 (共8个回复)
沙发
yangqi506 [专家分:0] 发布于 2007-04-25 09:05:00
我的QQ是305702473 邮箱:yangqi506@tom.com ~~
板凳
yangqi506 [专家分:0] 发布于 2007-04-25 10:36:00
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define n 3000
main()
{
int r[n];
int i,a;
randomize();
for(i=0; i<10; i++)
{
for(a=1;a<3000;a++)
r[a]=rand() % 3000;
}
for(a=1;a<20;a++) /*打印r[1]-r[19]*/
{printf("r[%d] is %d\n", a,r[a]);}
}
自己写了个~大家看看
3 楼
gqhonesty [专家分:2920] 发布于 2007-04-26 10:39:00
randomize()
这个函数没有见过!
不过这个也行:
srand( (unsigned)time( NULL ) );
随机种子!
4 楼
yangqi506 [专家分:0] 发布于 2007-05-02 12:25:00
谢谢
5 楼
yangqi506 [专家分:0] 发布于 2007-06-08 14:57:00
随即函数 的取值问题,我用的是rand函数(后面该了下),范围在0-32767,在用8w个进行排序时老出现相同的数,效率很低,谁能说下怎么把随即函数的取值范围搞大?
6 楼
朋友,你还好吗? [专家分:40] 发布于 2007-06-11 12:41:00
//其实计算机中用的随机数全部是伪随机数,并不是真正的随机。void srand(unsigned int )
//就是着一种。void randomize(void)是根据long time(long *)来产生srand()的初始值,来提高随即度
//其实这些函数自己可以根据标准函数库自己写,所以好好利用库是很重要的。只是我的鄙见和贱作
void randomize(void)
{
srand((int) time(NULL));
}
int randominteger(int low,int high)
{
int k;
double d;
d=(double)rand()/(double)(RAND_MAX+1);//
k=(int)(d*(high-low+1));
reurn (low+k);
}
double randomreal(double low ,double high)
{
double d;
d=(double)rand()/(double)(RAND_MAX+1);//
k=(double)(d*(high-low+1));
reurn (low+k);
}
bool randchance(double p)
{
return (randomreal(0,1)<p);
}
7 楼
rickone [专家分:15390] 发布于 2007-06-11 23:58:00
我觉得srand()不能提高它本身的‘随机度’
8 楼
yangqi506 [专家分:0] 发布于 2007-06-23 11:08:00
恩,谢谢楼上的
我来回复