zoukankan      html  css  js  c++  java
  • PHP实现发红包程序(helloweba网站经典小案例)

    我们先来分析下规律。

    设定总金额为10元,有N个人随机领取:

    N=1 第一个

    则红包金额=X元;

    N=2 第二个

    为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数。

    第二个红包=10-第一个红包金额;

    N=3 第三个

    红包1=0.01至9.99之间的某个随机数

    红包2=0.01至(10-红包1-0.01)的某个随机数

    红包3=10-红包1-红包2

    ……

    于是我们得到一个规律,在分配当前红包金额时,先预留剩余红白所需最少金额,然后在0.01至总金额-预留金额间取随机数,得到的随机数就是当前红包分配的金额。

    实际应用中,程序先将红包金额分配好,即发红包时,红包个数以及每个红包的金额都分配好了,那么用户来抢红包时,我们随机给用户返回一个红包即可。

    红包分配代码:

    <?php
         $total=20;
         $num=10;
         $min=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."个红包:".$money."元"."余额:".$total."元";
    ?>    

    运行以上代码,会输出以下结果:

    第1个红包,金额2.08元,余额17.92元

    第2个红包,金额1.81元,余额16.11元

    第3个红包,金额0.15元,余额15.96元

    第4个红包,金额1.61元,余额14.35元

    第5个红包,金额1.11元,余额13.24元

    第6个红包,金额1.51元,余额11.73元

    第7个红包,金额1.21元,余额10.52元

    第8个红包,金额2.58元,余额7.94元

    第9个红包,金额5.4元,余额2.54元

    第10个红包,金额2.54元,余额0元

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/kangshuai/p/4946225.html
Copyright © 2011-2022 走看看