聘我网

新概念招聘3.0

给定一个1~5的随机数生成器,如何编写一个1~7的随机数生成器?

vote up0vote downstar
function rand7()
{
    $vals = array(
        array( 1, 2, 3, 4, 5 ),
        array( 6, 7, 1, 2, 3 ),
        array( 4, 5, 6, 7, 1 ),
        array( 2, 3, 4, 5, 6 ),
        array( 7, 0, 0, 0, 0 )
    );

    $result = 0;
    while ($result == 0)
    {
        $i = rand5();
        $j = rand5();
        $result = $vals[$i-1][$j-1];
    }
    return $result;
}

这种算法非常地巧妙。 先人工构造一个5*5的数组,其中非0的数字(1~7)各出现3次,然后从中随机的抽出一个非0数。 1~7中任一个数被抽中的概率都是3/21=1/7,所以是一个合格的随机数生成器。

然后可以推广到更一般的情况,randn->randn_k,利用n*n数组,然后先填上(n+k)*[n*n/n+k]个非0数,剩余位置填0.

 

1 个答复

vote up0vote down

我看了很多这个站上 php 相关的问题 ...

您的答案总是简捷到位 ...

我想知道您是这个站的开发者 ..?

或者如果不是的话您在其他论坛的 id 是 ..?

链接
开发者是我本人~ - Shore 2010-12-28, 04:05

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.