扩展随机数空间
- 问题:
现在有一个函数int r()可以随机获得[0, 6]之间的随机整数,问:如何正确使用此函数来随机获得 [0, 9]之间的整数?
- 答案:
int rand_ten()
{
x = 7 * r() + r();
if (x > 39)
{
return rand_ten();
}
return x / 4; //或者x%10;
}
- 解析
- 7 * r() + r()得到的是[0, 48]直接的随机数,每个数出现的概率是相等的。现在我们直接抛弃>39以上的数,即得到[0, 39]之间的随机数,每个数出现的概率也是一样的。之后的/4或者%10就无所谓了。