给定一个随机的int生成器[0-5],生成[0-7]

hsn*_*nsd 3 algorithm

所以这是一个面试问题。

提供了一个函数rand5(),该函数生成范围为[0-5]的随机整数,即{0,1,2,3,4,5}

a)您可以使用该函数生成范围为[0-7]的随机整数吗?

b)您可以使用该函数生成范围为[0-7]的随机整数,每个数字具有相等的概率吗?

您可以多次使用该功能。

a部分的解决方案之一,((rand5() +rand5())*7)//10其中// represents integer division的范围为[0-7],但是概率不相等。

希望看到您的答案和思考过程。

Dav*_*man 5

    $one  = rand5();
    $two  = rand5();
    $four = rand5();

    return (($four < 3)? 4 : 0)  +  (($two < 3)? 2 : 0)  +  ($one < 3)? 1 : 0);
Run Code Online (Sandbox Code Playgroud)

  • 不错,虽然不是`&gt; = 3`吗?(因此0、1、2为0,而3、4、5为1)。可能值得注意的是,只要源随机函数产生偶数个值并且所需范围是从零到2的幂乘以1,此方法就可以工作。 (4认同)
  • 人们对此表示赞同,但按照书面形式,它并不能提供统一的分布。同样,如果目标结果数不是2的幂,则此方法将不起作用-在这种情况下,您需要一个拒绝方案。 (2认同)