簡單的發紅包的PHP算法

假設有有10元錢 ,發給10我的。保證每一個人都有錢拿,最少分得0.01。咱們最早想到的確定就是隨機。0.01-10隨機。可是會出現第一我的就分得9.99的狀況。下面就沒人可分了。而後就是個人錯誤思路 ,先保證每一個人至少分到0.01,而後每次隨機。減去發出的金額。可是這個前面的人隨機的跨度大,因此越到後面金額越小。這也是不容許的。那麼咱們設置一個安全的金額區,從0.01到這個安全的金額區來隨機。那麼這個安全的金額區怎麼設定。那也很簡單,當有幾我的 把剩餘的錢相除得出平均數,是否是可讓每一個人都獲得錢了。
例如(金額按照分來算):php

 

$total = 1000;
$min = 1;//最小金額
$num = 10;
$i;// (第幾個紅包)
$safe_money;// 安全金額
$i=1;  $safe_total=($total-($num-$i)*$min)/($num-$i);
 $safe_money = (1000-(10-1)*1)/9;
 $safe_money = 110.11;
 //那麼第一我的的紅包金額就是mt_rand($min,$safe_money)
 //剩餘錢數爲$total = $total-mt_rand($min,$safe_money);依次類推
 //代碼以下
$total=10;//紅包總金額 
$num=10;// 分紅10個紅包,支持10人隨機領取 
$min=0.01;//每一個人最少能收到0.01元 
for ($i=1;$i<$num;$i++) 
{ 
 $safe_total=($total-($num-$i)*$min)/($num-$i);//隨機安全上限 
 echo "安全金額".$safe_total."<br>";
 $money=mt_rand($min*100,$safe_total*100)/100; 
 $total=$total-$money; 
 echo '第'.$i.'個紅包:'.$money.' 分,餘額:'.$total.' 分 '; 
 echo "<br>";
}
echo '第'.$num.'個紅包:'.$total.' 分,餘額:0 分';
====================================================================

  

第一次輸出輸出爲:
110.11111111111
第1個紅包:47 分,餘額:953 分 
118.125
第2個紅包:6 分,餘額:947 分 
134.28571428571
第3個紅包:79 分,餘額:868 分 
143.66666666667
第4個紅包:138 分,餘額:730 分 
145
第5個紅包:57 分,餘額:673 分 
167.25
第6個紅包:100 分,餘額:573 分 
190
第7個紅包:153 分,餘額:420 分 
209
第8個紅包:30 分,餘額:390 分 
389
第9個紅包:73 分,餘額:317 分 
第10個紅包:317 分,餘額:0 分
======================================================================
第二次輸出:
110.11111111111
第1個紅包:96 分,餘額:904 分 
112
第2個紅包:93 分,餘額:811 分 
114.85714285714
第3個紅包:61 分,餘額:750 分 
124
第4個紅包:109 分,餘額:641 分 
127.2
第5個紅包:83 分,餘額:558 分 
138.5
第6個紅包:129 分,餘額:429 分 
142
第7個紅包:87 分,餘額:342 分 
170
第8個紅包:166 分,餘額:176 分 
175
第9個紅包:147 分,餘額:29 分 
第10個紅包:29 分,餘額:0 分

 


---------------------
做者:我是技術渣
來源:CSDN
原文:https://blog.csdn.net/liuchen1314/article/details/79771003
版權聲明:本文爲博主原創文章,轉載請附上博文連接!安全

相關文章
相關標籤/搜索