随机数问题
2016-03-22 20:16
543 查看
题目:给定一个随机数生成器random_5(),这个生成器能均匀生成1到5(1,5)的随机数,如何使用这个生成器生成均匀分布的1到7(1,7)的数?
解题思路:random_5() - 1 随机产生 0-4
5*(random_5() - 1) 产生 0,5,10,15,20
5*(random_5() - 1) + (random_5() - 1) 随机产生 0 - 24
取 (0 -20) % 7 得到0-6的随机数,加上1即可
同理,已知random_m()随机数生成器的范围是[1, m] 求random_n()生成[1, n]范围的函数,m < n && n <= m *m
解题思路:random_5() - 1 随机产生 0-4
5*(random_5() - 1) 产生 0,5,10,15,20
5*(random_5() - 1) + (random_5() - 1) 随机产生 0 - 24
取 (0 -20) % 7 得到0-6的随机数,加上1即可
int random_7() { int res = 0; do{ res = 5*(random_5() - 1) + (random_5() - 1) }while(res>20); return res % 7 + 1;
同理,已知random_m()随机数生成器的范围是[1, m] 求random_n()生成[1, n]范围的函数,m < n && n <= m *m
int random_n() { int res = 0; int t = (m*m-1) / n //求出在[0-m*m]区间内n的最大倍数 do{ res = m*(random_m() - 1) + (random_m() - 1) }while(res> (t*n-1)); return res % n + 1;
相关文章推荐
- ORACLE随机数DBMS_RANDOM包
- C#利用Random得随机数求均值、方差、正态分布的方法
- Javascript SHA-1:Secure Hash Algorithm
- Shell脚本实现随机数多种方法介绍(date、random、uuid)
- javascript Math.random()随机数函数
- 不使用Math.random方法生成随机数(随机数生成器)
- 在javascript中随机数 math random如何生成指定范围数值的随机数
- javascript中Math.random()使用详解
- JavaScript中用于生成随机数的Math.random()方法
- 使用js Math.random()函数生成n到m间的随机数字
- Python中random模块用法实例分析
- Python中Random和Math模块学习笔记
- Python使用random和tertools模块解一些经典概率问题
- Python random模块(获取随机数)常用方法和使用例子
- python中随机函数random用法实例
- 生成几率可配置的随机数
- 关于Random,ThreadLocalRandom,SecureRandom的几点思考
- Python使用random和tertools模块解一些经典概率问题
- 手机RAM、ROM和储存卡的那些事
- Random Index