领红包算法

<?php
    /**
    * 抢红包算法简单实现
    * 原理:(1)每个人都要拿到红包
    *       (2)每个人获取的总和是发出红包的总金额
    *       (3)每个人获取金额不会相差太大
    */
    class money {
        private $min=0.01;    //针对中国货币来说,最少是1分,单位是元

        /**
        * 抢红包方法
        * @param int $total  总金额
        * @param int $num  红包个数
        */
        public function share($total, $num) {
            if(empty($total) || !is_int($total)) return false;
            if(empty($num) || !is_int($num)) return false;

            $min = $this->min;
            for($i=1;$i<$num;$i++) {
                $safe = ($total-($num-$i)*$min)/($num-$i); //随机安全上限
                $money = mt_rand($min*100,$safe*100)/100;  //获取金额的随机值
                $total = $total-$money; //总数在减少;
                $m[] = $money;
            }
            $m[] = $total;
            return $m;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值