帮忙求出一个算法来。

bing15 2015-10-20 10:47:02
比如:

微信红包的总额有100元,必须要发送给60个用户,每个用户领取的红包是随机的,但是金额不得大于2元。

怎么求出一个算法来发红包。
...全文
261 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Charles杨 2015-11-14
引用 1 楼 xuzuning 的回复:
一个可能的算法
$total = 10000;
$copies = 60;
$min = 1;
$max = 200;

$r = Redbag($total, $copies, $min, $max);
printf("项数:%s 合计%d 最大:%d 最小:%d\n", count($r), array_sum($r), max($r), min($r));
print_r($r);

function Redbag($total, $copies, $min, $max) {
  $res = array_fill(0, $copies, $min);
  while(array_sum($res) < $total) {
    $k = rand(0, $copies - 1);
    if(++$res[$k] > $max) $res[$k]--;
  }
  return $res;
}
大神,你太厉害了,你咋啥都会了啊!佩服!!
回复
toad_in_well 2015-11-12

$total=10;//红包总额
$num=8;// 分成8个红包,支持8人随机领取
$min=0.01;//每个人最少能收到0.01元

for ($i=1;$i<$num;$i++)
{
    $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限
    $money=mt_rand($min*100,$safe_total*100)/100;
    $total=$total-$money;
    echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 <br/>';
}
echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';
在知乎上看到的。。http://www.zhihu.com/question/22625187 这是设定了一个最小值。。
回复
Kepon_cai 2015-11-04
//改了一下,可以调整分配的基数 <?php $total =100; $amount = 60; $baseCash = 0.1; $arr = assign_money($total,$amount,$baseCash); var_dump($arr); var_dump(array_sum($arr)); function assign_money($total,$amount,$baseCash){ $arr = array_fill(0,$amount,$baseCash); $total=floor($total - $amount*$baseCash); while($total>0){ $lucky =rand(0,$amount-1); if($arr[$lucky]<2){ $arr[$lucky]+=$baseCash; $total = round($total - $baseCash,1); } } return $arr; } ?>
回复
xuzuning 2015-10-21
一个可能的算法
$total = 10000;
$copies = 60;
$min = 1;
$max = 200;

$r = Redbag($total, $copies, $min, $max);
printf("项数:%s 合计%d 最大:%d 最小:%d\n", count($r), array_sum($r), max($r), min($r));
print_r($r);

function Redbag($total, $copies, $min, $max) {
  $res = array_fill(0, $copies, $min);
  while(array_sum($res) < $total) {
    $k = rand(0, $copies - 1);
    if(++$res[$k] > $max) $res[$k]--;
  }
  return $res;
}
回复
相关推荐
发帖
PHP
创建于2008-08-27

1.9w+

社区成员

“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
申请成为版主
帖子事件
创建了帖子
2015-10-20 10:47
社区公告
暂无公告