首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言随机生成数RAND_MAX有关问题

2012-10-17 
C语言随机生成数RAND_MAX问题在练习算法中排序时数据需要自己输入,今天想写一个随机生成一组不重复的数组,

C语言随机生成数RAND_MAX问题
在练习算法中排序时数据需要自己输入,今天想写一个随机生成一组不重复的数组,以前写随机成生数是这样写的:

C/C++ code
int a = rand()%100+1;   //生成从0到100的随机数

但是现在想指定范围,即给出一个max和一个min生成这个范围内的数。
查资料上面是这样写的:
C/C++ code
int a = (max-min+1)*rand()/(RAND_MAX+1)+min;

很是郁闷,不能理解,求解。。

[解决办法]
我没有记错的话,rand()返回一个0到RAND_MAX随机整数,你的工作就是将这个整数线性压缩进(min,max)范围中
[解决办法]
rand():产生0到RAND_MAX随机整数,共计RAND_MAX+1个。
rand()/(RAND_MAX+1):能够得到一个[0,1)内均匀分布的小数。
(max-min+1):区间大小
min+(max-min+1)*rand()/(RAND_MAX+1)即min加上区间的一部分,即为min到max之间的随机数。

[解决办法]
数学上的一点简单变换知识
x+b----平移b个距离
k*x----比例绽放k倍
组合起来
k*x+b----先缩放k倍 再 平移b
rand()----产生[0,RAND_MAX)间的整数
rand{}/RAND_MAX----缩小RAND_MAX倍,值为[0,1)间的浮点数----注意除法结果是整数除法
(...)*rand{}/RAND_MAX----放大到[0,max-min+1)间,(max-min+1)--宽度
min+....----平移到[min,max]
注意式子中类型变换,最后结果是double

热点排行