• 想用PHP做抽奖系统,思路..


    做PHP确实很少接触算法问题
    前几天遇到一个PHP几率算法问题,很有意思,
    大致就是一个抽奖程序
    贵重物品出现几率低,便宜物品出现几率高
    网上找打了答案,在下面评论中看到了另一种方法,我觉得更好,效率更高

    转来这个问题,和我之前遇到的差不多,
    问题是这样子的:在一个物品合成系统中,需要使用几件不同的物品来合成宝石,有不同的几率生成一颗(50%)、两颗(16%)和三颗(2%)宝石,其余的为爆掉,即什么也得不到。

    //初始化数组

    $stone_arr = array( 
    array( 'num' => 1, 'prob' => '50%' ),
    array( 'num' => 2, 'prob' => '16%' ),
    array( 'num' => 3, 'prob' => '2%' )
    );

    //随机获得一个幸运数字
    $luck_num = mt_rand( 0, 99 );
    //初始化几率区间和最终宝石生产数目
    $lucky_range = $made_num = 0;

    foreach( $stone_arr as $sa ){
    $prob = intval( $sa['prob'] );
    if( $luck_num >= $lucky_range && $luck_num < $lucky_range + $prob ){
    $made_num = $sa['num'];
    break;
    }
    else{
    $lucky_range += $prob;
    }
    }

    for( $i = 0; $i < $made_num; $i++ ){
    //生产宝石的逻辑
    }

    然后是第二种方法,我喜欢的方法,不知道数量多了效率会不会也有问题

    $a = array_fill(0,50, 1);
    $b = array_fill(0,16, 2);
    $c = array_fill(0,2, 3);
    $d = array_fill(0,32, 0);
    $arr = array_merge($a, $b, $c);
    //var_dump($arr);
    $d = mt_rand(0,99);
    echo $arr[$d];

    http://www.yl1001.com/yw.htm?doaction=question_detail&question_id=7221371520123639

  • 相关阅读:
    删库跑路技术白皮书
    linux shell文件截取前几行,后几行,中间几行命令
    python 带参数 单步执行 (调试 pdb)
    分区助手专业版 v6.2 如何把win10系统迁移到SSD固态硬盘
    GUPPY 3.1.5 安装
    Java调用其他语言
    python代码中获取python版本号的方法
    f-Strings:Python 3格式字符串的新方法(f字符串)
    Centos 安装 pigz
    #!/usr/bin/env python与#!/usr/bin/python的区别
  • 原文地址:https://www.cnblogs.com/lemon66/p/4184807.html
Copyright © 2020-2023  润新知