C语言随机生成数RAND_MAX有关问题
C语言随机生成数RAND_MAX问题在练习算法中排序时数据需要自己输入,今天想写一个随机生成一组不重复的数组,
C语言随机生成数RAND_MAX问题
在练习算法中排序时数据需要自己输入,今天想写一个随机生成一组不重复的数组,以前写随机成生数是这样写的:
C/C++ codeint a = rand()%100+1; //生成从0到100的随机数
但是现在想指定范围,即给出一个max和一个min生成这个范围内的数。
查资料上面是这样写的:
C/C++ codeint 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