zoukankan      html  css  js  c++  java
  • 发红包随机金额的两种方式

    总结下微信红包随机函数

    1   固定面额      即 输入金额生成已知的固定金额

    //total  红包总金额   
     protected function randCoupon($total=30){
            $denomination = array(10,5,3,2,1);//固定面额
            $arr = array();
            while ($total){
                if(count($denomination)>0){
                    $index = rand(0,count($denomination)-1);//随机抽取一个固定面额索引
                    $money = $denomination[$index];
                    if($money>$total) continue;
                    array_push($arr,$money);
                    $total = (int)$total - (int)$money;
                    if($total==1){
                        array_push($arr,$total);
                        break;
                    }
                    if($total<1) break;
                    foreach ($denomination as $k => $item){
                        if($total <= $item){
                            array_splice($denomination,$k,1);
                        }
                    }
                }
    
            }
            shuffle($arr);//重新打乱数组
            return $arr;
        }

    2   随机金额    即输入金额及红包个数   然后生成一个随机数组

       //拆分数值生成若干个和等于该数值随机值
        public function randNum($total=200,$num=17) {
            $min=0.01;//每个人最少能收到0.01元
            for ($i=1;$i<$num;$i++) {
                $safe_total = ($total - ($num-$i)*$min) / ($num-$i);//随机安全上限
                if($safe_total < 0.01) $safe_total = 0.01;
                $money = mt_rand($min*100,$safe_total*100)/100;
                $total = $total - $money;
                $data[] = round($money,2);
            }
            $data[] = round($total,2);
            shuffle($data);
            return $data;
        }
  • 相关阅读:
    bzoj 1016 JSOI2008 最小生成树计数
    bzoj 1070 SCOI2007 修车
    bzoj 1042 HAOI2008 硬币购物
    bzoj 1132 POI2008 Tro
    bzoj 1227 SDOI2009 虔诚的墓主人
    bzoj 1024 SCOI2009 生日快乐
    1103 POI2007 大都市meg
    bzoj 1009:[HNOI2008]GT考试
    noip2006T1 能量项链
    bzoj 1006: [HNOI2008]神奇的国度
  • 原文地址:https://www.cnblogs.com/xiaofei723/p/14924037.html
Copyright © 2011-2022 走看看