您的位置:首页 > 编程语言 > Go语言

随机数问题

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即可

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息