扩展随机数空间

  1. 问题:

现在有一个函数int r()可以随机获得[0, 6]之间的随机整数,问:如何正确使用此函数来随机获得 [0, 9]之间的整数?

  1. 答案:
int rand_ten()
{
x = 7 * r() + r();
if (x > 39)
{
return rand_ten();
}
return x / 4; //或者x%10;
}



  1.  解析
    • 7 * r() + r()得到的是[0, 48]直接的随机数,每个数出现的概率是相等的。现在我们直接抛弃>39以上的数,即得到[0, 39]之间的随机数,每个数出现的概率也是一样的。之后的/4或者%10就无所谓了。

  

posted on 2012-03-12 15:30  aho  阅读(167)  评论(0编辑  收藏  举报

导航