第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

長風(fēng)秋雁 2018-06-29 15:15:08
以前想過一個(gè)類似問題,就是沒有每個(gè)人最大、最小的得錢數(shù)的限制,以前的問題可以很好用隨機(jī)數(shù)解決。于是這個(gè)問題也被以前的思想帶坑里了,把突破口完全放在了如何處理每個(gè)人的隨機(jī)數(shù)上。于是在面試時(shí)間就沒有解決這個(gè)問題,直到面試結(jié)束自己安靜下來,仔細(xì)想想,發(fā)現(xiàn)思路錯(cuò)了。我認(rèn)為正確的思路是:每個(gè)人先得6塊錢,這樣剩下40塊錢,之后每次拿出一塊錢,隨機(jī)分配給一個(gè)人,如果某個(gè)人的錢數(shù)達(dá)到了上限,那么這個(gè)人下次就沒有了再得到錢的資格了。這樣直到剩下錢都分配完。當(dāng)然在接口的實(shí)際處理上可以做些優(yōu)化,例如剩下的錢每次隨機(jī)分配的錢可以是隨機(jī)的(當(dāng)然這個(gè)隨機(jī)要做一些限制,以免一下就分配超額了),然后如果某個(gè)人錢+這次隨機(jī)分配的錢>每個(gè)人的上限,那么他就沒有資格得到這個(gè)錢了。隨機(jī)分配也好實(shí)現(xiàn),先算有幾個(gè)人有資格得到這筆錢,隨即一個(gè)數(shù),決定給第幾個(gè)符合資格的人。我的思路就是這樣,大家如果有更好的思路,請(qǐng)告知。謝謝。
查看完整描述

2 回答

?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

$cash = 40;
$user_arr = array(6,6,6,6,6,6,6,6,6,6);
while($cash>0){
    $user_id = rand(0, 9);
    if($user_arr[$user_id]<12){
        $user_arr[$user_id]++;
        $cash--;
    }
}

;
var_dump($user_arr,array_sum($user_arr));die;
性能篇
$arr1=range(2,6);
shuffle($arr1);
$arr2=range(2,6);
shuffle($arr2);
$user_arr = array(6,6,6,6,6,6,6,6,6,6); 
for ($i=0;$i<10;$i++){
     
     if($i<=4){
         $user_arr[$i] += $arr1[$i];
     }else{
         $j = $i%5;
         $user_arr[$i] += $arr2[$j];
         
     }
 }
var_dump($user_arr,array_sum($user_arr));die;


查看完整回答
反對(duì) 回復(fù) 2018-07-14
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

我寫了個(gè)思路迥異的。。。感覺有點(diǎn)麻煩,不過效率和可擴(kuò)展性還湊合。

思路:每次分配后,都確定剩余的金錢在合理范圍。
若合理,進(jìn)行下次分配
否則,重新進(jìn)行此次分配。

<?phpfunction hongbao($money, $people, $min, $max){
    $result = [];    
    for ($i=0; $i < $people; $i++) { 
        do {            // 1.進(jìn)行本次分配
            $result[$i] = mt_rand($min*100, $max*100) / 100; 
            // 2.本次分配后,剩余人數(shù)
            $restPeople = $people - ($i+1);    
            // 3.本次分配后,剩余金錢
            $restMoney  = $money - array_sum(array_slice($result, 0, $i+1)); 
            // 4.本次分配后,剩余金錢是否在合理范圍? 不在則重新分配
        } 
        while ($restMoney > $restPeople * $max || $restMoney < $restPeople * $min);
    }    
    return $result;
}

$result = hongbao(100, 10, 6, 12);
// 驗(yàn)證
var_dump($result);
var_dump(array_sum($result));

運(yùn)行結(jié)果:

https://img1.sycdn.imooc.com//5b49c03a0001dd6f03860780.jpg

查看完整回答
反對(duì) 回復(fù) 2018-07-14
  • 2 回答
  • 0 關(guān)注
  • 393 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)