PHP筆試——指定機率隨機數

來源:互聯網
上載者:User

某大公司PHP筆試題目如下:

請寫一個程式,隨機列印“0”、“1”、“2”,但保證“0”、“1”、“2”出現的機率是可配置的,例如2:1:3。

乍一看,解決方案油然而生——

<?PHP    $a=$b=$c=0;    $array = array(0,0,1,2,2,2);    for($i=1;$i<6001;$i++){        $t = array_rand($array);        if($t==0){            $a++;        }        if($t==1){            $b++;        }        if($t==2){            $c++;        }    }    echo $a;    echo "\n";    echo $b;    echo "\n";    echo $c;    echo "\n";?>

結果什麼樣,我沒想到~~~~

機率沒控制住啊~~~

最後在網上找到了一個比較不錯的方法,其實想想真的挺簡單的,就是沒轉過來,哈哈哈~~~

<?PHP    $a=$b=$c=0;    for($i=1;$i<6001;$i++){        $temp = rand(0,60);        if($temp<20){            $a++;        }elseif(20<=$temp&&$temp<30){            $b++;        }else{            $c++;        }    }    echo $a;    echo "\n";    echo $b;    echo "\n";    echo $c;    echo "\n";?>

結果不錯~~

 

重寫成函數:

<?PHP    function getRandom($array,$rate){        $rate = explode(':',$rate);        $sum = 0;        $left = 0;        $right = 0;        foreach($rate as $value){            $sum+=$value*10;        }        $temp = rand(0,$sum);        foreach($rate as $key=>$value){            $right+=$value*10;            if($left<=$temp && $temp<$right){                return $array[$key];            }            $left+=$value*10;        }    }   $array = array(0,1,2,3);    $rate = '2:1:3:5';    $a=$b=$c=$d=0;    for($i=0;$i<1100;$i++){        if(getRandom($array,$rate)==0){            $a++;        }        if(getRandom($array,$rate)==1){            $b++;        }        if(getRandom($array,$rate)==2){            $c++;        }        if(getRandom($array,$rate)==3){            $d++;        }    }    echo $a;    echo "\n";    echo $b;    echo "\n";    echo $c;    echo "\n";    echo $d;    echo "\n";?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.