zoukankan      html  css  js  c++  java
  • 红包算法

    $money = 10;    // 红包大小
    $num   = 10;      // 红包个数
    $min   = 0.01; // 单个红包最低金额
    
    $ret = lottery($money, $num, $min);
    if (! is_array($ret)) {
        exit($ret.PHP_EOL);
    }
    
    echo '手气最佳:'.max($ret).PHP_EOL;
    echo '手气最差:'.min($ret).PHP_EOL;
    echo PHP_EOL;
    
    print_r($ret);
    
    //----------------------------------------------------------------------
    
    // 产生一个随机浮点数
    function random_float($min = 0, $max = 1)
    {
        return round($min + mt_rand() / mt_getrandmax() * ($max - $min), 2);
    }
    
    // 微信随机红包模拟算法
    function lottery($sum_money, $num, $min_money = 0.01)
    {
        if ($sum_money < $num * $min_money) {
            return '钱不够';
        }
    
        $list = [];
        for ($i = 1; $i <= $num; $i++) {
            // 剩余的可分配金额,需要确保剩下的人每人都至少可以拿到保底的钱
            $remain = $sum_money - array_sum($list) - ($num - $i + 1) * $min_money;
    
            if ($i < $num) {  // 前面的人随机获得
                // 每轮抽取的金额范围:0 至 剩余金额平均值的两倍
                $get = random_float(0, $remain / ($num - $i + 1) * 2);
            } else {  // 最后一个人拿全部剩下的
                $get = $remain;
            }
    
            // 最后再将每个人保底的钱加上
            $list[] = round(round($get, 2)   + $min_money, 2);
        }
    
        return $list;
    }
  • 相关阅读:
    iOS开发之友盟分享的使用
    iOS开发之AFNetworking开源库的使用
    iOS开发之网络基础知识
    iOS开发之Block
    iOS开发之数据库FMDB
    iOS开发常用的网站
    iOS开发之下拉刷新和上拉加载更多
    iOS开发之XML解析
    iOS之网络数据下载和JSON解析
    Linux 部署项目经验总结
  • 原文地址:https://www.cnblogs.com/mengor/p/11539864.html
Copyright © 2011-2022 走看看