您好,登錄后才能下訂單哦!
前段時(shí)間有個(gè)項(xiàng)目需要用到紅包算法,本以為簡(jiǎn)單,細(xì)想之下有點(diǎn)復(fù)雜。于是就百度了一下,沒想到查出了不少,有些寫的很復(fù)雜。由于時(shí)間有點(diǎn)緊,我就找了一個(gè)簡(jiǎn)單點(diǎn)的。然后參考著寫一個(gè)。參考的地址是:https://blog.csdn.net/gorgle/article/details/52954413;
這個(gè)地址中的紅包是用java寫的。根據(jù)其原理,我用PHP寫了一遍,并且改進(jìn)了點(diǎn)。他的算法中沒有加每個(gè)紅包最大最小值限制。我用PHP寫的時(shí)候加上去了。代碼如下:
<?php /* $total_money:紅包總金額 $total_people:總?cè)藬?shù)/總分?jǐn)?shù) $min_money:每份紅包的最小金額 $max_money:每份紅包的最大金額 */ function redpack($total_money,$total_people,$min_money,$max_money){ $ret=array(); $new_ret=array(); $total_real_money=$total_money-$total_people*$min_money; $ret[0]=0; for($i=1;$i<$total_people;$i++){ $ret[$i]=get_rand($ret[$i-1],$total_real_money,($max_money-$min_money)); } sort($ret); for($j=0;$j<count($ret);$j++){ if($j==count($ret)-1){ $new_ret[count($ret)-1]=$total_real_money-$ret[count($ret)-1]+$min_money; }else{ $new_ret[]=$ret[$j+1]-$ret[$j]+$min_money; } } shuffle($new_ret); return $new_ret; } function get_rand($start,$end,$max){ $tmp=rand($start,$end); $total_max=$start+$max; if($tmp>($total_max) || empty($tmp)){ return get_rand($start,$end,$max); }else{ return $tmp; } }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。