回 帖 发 新 帖 刷新版面

主题:关于随机函数的问题

各位大大们~, 
     因为手头工作问题,需要在C下用随机函数产生数放入一个数组,然后用数组里的数整理成堆,然后进行优化堆排序,对于随机函数的产生原理我不是很清楚,在随机函数这个地方我卡住了~~那位大哥能指导下我吗?就是在C下如何用随机函数产生数(int型),再存入一个数组,在1-30000之间的数。。。[em8]  先谢了~~

回复列表 (共8个回复)

沙发

我的QQ是305702473  邮箱:yangqi506@tom.com ~~

板凳

#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 楼

randomize()
这个函数没有见过!
不过这个也行:
srand( (unsigned)time( NULL ) );
随机种子!

4 楼

谢谢

5 楼

随即函数 的取值问题,我用的是rand函数(后面该了下),范围在0-32767,在用8w个进行排序时老出现相同的数,效率很低,谁能说下怎么把随即函数的取值范围搞大?

6 楼

//其实计算机中用的随机数全部是伪随机数,并不是真正的随机。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 楼

我觉得srand()不能提高它本身的‘随机度’

8 楼

恩,谢谢楼上的

我来回复

您尚未登录,请登录后再回复。点此登录或注册