有一定金额(m)的钱,要求生成 n 个红包,每个红包中的钱数是 1--100的随机数

<?php
//mt_rand是内部自动更新rand种子,因此保证产生优质均匀的随机数,
//因此可以看到结果也是均匀的在 (1+100)/2=50.5上下浮动
error_reporting(E_ALL);
$arr=array();
//总钱数
$m=1000;
//红包数
$n=20;
//最小钱
$beg=1;
//最大钱
$end=100;
for($i=0;$i<$n;$i++){
     //初始化所有红包,避免有的红包一分钱也没有,默认值为1
     $arr[$i]=$beg;
}
while(array_sum($arr)<$m){
     $pos=mt_rand(0, $n-1);
     if($arr[$pos]<$end)
     $arr[$pos]++;
}
echo "<pre>";
print_r($arr);
echo "</pre>";
echo "sum:".array_sum($arr);

?>
posted @ 2014-04-04 17:19  wint  Views(986)  Comments(0Edit  收藏  举报