成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

面試問題:發(fā)一個(gè)隨機(jī)紅包,100塊錢給10個(gè)人。每個(gè)人最多12塊錢,最少6塊錢。怎么分?

yexiaobai / 1019人閱讀

這問題是@xinhaip從那邊看來。
他之前的思路是這樣子:

以前想過一個(gè)類似問題,就是沒有每個(gè)人最大、最小的得錢數(shù)的限制,以前的問題可以很好用隨機(jī)數(shù)解決。

于是這個(gè)問題也被以前的思想帶坑里了,把突破口完全放在了如何處理每個(gè)人的隨機(jī)數(shù)上。

于是在面試時(shí)間就沒有解決這個(gè)問題,直到面試結(jié)束自己安靜下來,仔細(xì)想想,發(fā)現(xiàn)思路錯(cuò)了。

在我看來其實(shí)他一開始的思路恰恰是正確的,然而我在他的問題下面發(fā)布了答案,卻沒什么人贊同。
我只能在自己寫個(gè)文章分析下我的解題思路。

題目

發(fā)一個(gè)隨機(jī)紅包,100塊錢給10個(gè)人。每個(gè)人最多12塊錢,最少6塊錢。怎么分?

答案

設(shè)sum=100,n=10,則題目可以得到以下結(jié)論6n <= sum <= 12n

設(shè)randNum為隨機(jī)紅包的大小,則可以推出6(n-1) <= (sum-randNum) <= 12(n-1)

從上面的結(jié)論里我們可以得到以下答案

function makeSeq(){
    $n = 10;
    $sum = 100;
    $result = [];
    while ($n > 1) {
        // 6n <= sum <=12n
        $randNum = mt_rand(600,1200) / 100;
        if(($sum-$randNum) >= 6* ($n - 1) && ($sum-$randNum) <= 12* ($n - 1)){
            $sum -= $randNum;
            $n -= 1;
            $result[] = $randNum;
        }
    }
    $result[] = $sum;
    return $result;
}
進(jìn)階

上面的答案效率不是很高,其實(shí)我們可以通過計(jì)算紅包的上下界,然后通過一次隨機(jī)得到答案。
6(n-1) <= (sum-randNum) <= 12(n-1)可得sum - 12(n-1) <= randNum <= sum - 6(n-1)。
又由6 <= randNum <= 12計(jì)算得到紅包的上下界:

 $min = ($sum - 12 * ($i-1))>6?($sum - 12 * ($i-1)):6;
 $max = ($sum - 6 * ($i-1))<12?($sum - 6 * ($i-1)):12;

則最終答案是

function makeSeq2(){
    $n = 10;
    $sum = 100;
    $result = [];
    for($i=$n;$i>=1;$i--){
        $min = ($sum - 12 * ($i-1))>6?($sum - 12 * ($i-1)):6;
        $max = ($sum - 6 * ($i-1))<12?($sum - 6 * ($i-1)):12;
        $randNum = mt_rand($min,$max);
        $sum -= $randNum;
        $result[] = $randNum;
    }
    return $result;
}
根據(jù)種子生成序列,且符合期望

評論里說生成的序列不符合平均為10的期望,所以我們需要在返回結(jié)果結(jié)果前打亂序列。
最好還能根據(jù)種子生成每次都相同的結(jié)果,在這里我們要自定義shuffle函數(shù)。

function myShuffle(&$items,$seed) { 
    mt_srand($seed); 
    for ($i = count($items) - 1; $i > 0; $i--){ 
        $j = @mt_rand(0, $i); 
        $tmp = $items[$i]; 
        $items[$i] = $items[$j]; 
        $items[$j] = $tmp; 
    } 
} 

function makeSeq2($seed){
    mt_srand($seed);
    $n = 10;
    $sum = 100;
    $result = [];
    for($i=$n;$i>=1;$i--){
        $min = ($sum - 12 * ($i-1))>6?($sum - 12 * ($i-1)):6;
        $max = ($sum - 6 * ($i-1))<12?($sum - 6 * ($i-1)):12;
        $randNum = mt_rand($min,$max);
        $sum -= $randNum;
        $result[] = $randNum;
    }
    myShuffle($result,$seed);
    return $result;
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21788.html

相關(guān)文章

  • 面試問題發(fā)一個(gè)隨機(jī)紅包,100錢給10個(gè)人。每個(gè)人最多12塊錢,最少6塊錢。怎么

    摘要:以前想過一個(gè)類似問題,就是沒有每個(gè)人最大最小的得錢數(shù)的限制,以前的問題可以很好用隨機(jī)數(shù)解決。于是這個(gè)問題也被以前的思想帶坑里了,把突破口完全放在了如何處理每個(gè)人的隨機(jī)數(shù)上。在與面試交談中,明顯有些緊張。 以前想過一個(gè)類似問題,就是沒有每個(gè)人最大、最小的得錢數(shù)的限制,以前的問題可以很好用隨機(jī)數(shù)解決。 于是這個(gè)問題也被以前的思想帶坑里了,把突破口完全放在了如何處理每個(gè)人的隨機(jī)數(shù)上。 于是在...

    toddmark 評論0 收藏0
  • 入職三天,公司給了100塊錢叫我走人

    摘要:初來乍到,請多多指教,踏入廣州那一刻,我滿懷熱情的對廣州說。本以為,作為大學(xué)畢業(yè)的我,在國內(nèi)最大的軟件服務(wù)商被寄予厚望的我,在廣州應(yīng)該也是個(gè)熱餑餑,不愁吃不愁穿不愁的。然而現(xiàn)實(shí)是廣州的公司對我并沒有多多指教,而是多多拋棄。 十月,金秋季節(jié),本是豐收之時(shí),卻因?yàn)殛懤m(xù)有同事離職,心中多少有些悲涼之意,頓然想起從參加工作到現(xiàn)在,五年已過,當(dāng)年青澀懵懂的小年輕,如今出街招搖過市時(shí),被小孩子看到...

    Chao 評論0 收藏0
  • 入職三天,公司給了100塊錢叫我走人

    摘要:初來乍到,請多多指教,踏入廣州那一刻,我滿懷熱情的對廣州說。本以為,作為大學(xué)畢業(yè)的我,在國內(nèi)最大的軟件服務(wù)商被寄予厚望的我,在廣州應(yīng)該也是個(gè)熱餑餑,不愁吃不愁穿不愁的。然而現(xiàn)實(shí)是廣州的公司對我并沒有多多指教,而是多多拋棄。 十月,金秋季節(jié),本是豐收之時(shí),卻因?yàn)殛懤m(xù)有同事離職,心中多少有些悲涼之意,頓然想起從參加工作到現(xiàn)在,五年已過,當(dāng)年青澀懵懂的小年輕,如今出街招搖過市時(shí),被小孩子看到...

    Karrdy 評論0 收藏0
  • 入職三天,公司給了100塊錢叫我走人

    摘要:初來乍到,請多多指教,踏入廣州那一刻,我滿懷熱情的對廣州說。本以為,作為大學(xué)畢業(yè)的我,在國內(nèi)最大的軟件服務(wù)商被寄予厚望的我,在廣州應(yīng)該也是個(gè)熱餑餑,不愁吃不愁穿不愁的。然而現(xiàn)實(shí)是廣州的公司對我并沒有多多指教,而是多多拋棄。 十月,金秋季節(jié),本是豐收之時(shí),卻因?yàn)殛懤m(xù)有同事離職,心中多少有些悲涼之意,頓然想起從參加工作到現(xiàn)在,五年已過,當(dāng)年青澀懵懂的小年輕,如今出街招搖過市時(shí),被小孩子看到...

    kgbook 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<