PHP完毕微信红包金额拆分试玩的算法示例北京赛

日期:2019-11-21编辑作者:广告色剂

北京赛车官方正版投注 1

<?php
// 新年红包金额拆分试玩

class CBonus
{
  public $bonus;//红包
  public $bonus_num;//红包个数
  public $bonus_money;//红包总金额
  public $money_single_max;//单个红包限额

  public function __construct(){
    $this->bonus_num = 10;
    $this->bonus_money = 200;
    $this->money_single_max = 60;
  }

  private function randomFloat($min = 0, $max = 1) {
    $mt_rand = mt_rand();
    $mt_getrandmax = mt_getrandmax();
    echo 'mt_rand=' . $mt_rand . ', mt_getrandmax=' . $mt_getrandmax . '<hr/>';
    return $min   $mt_rand / $mt_getrandmax * ($max - $min);
  }
  //计算
  public function compute()
  {
    $this->bonus = array();
    $bonus_money_temp = $this->bonus_money;
    $money_single_max = $this->money_single_max;
    $i = 1;
    while($i < $this->bonus_num)
    {
      if ($money_single_max > $bonus_money_temp)
      {
        $money_single_max = floatval(sprintf(".2f", $bonus_money_temp / 2));//剩余金额不够分时,把剩余金额的一半作为备用金
      }
      $bonus_money_rad = $this->randomFloat(0.01, $money_single_max);//一个红包随机金额 最小的1分钱
      $bonus_money_rad = floatval(sprintf(".2f", $bonus_money_rad));
      $bonus_money_temp = $bonus_money_temp - $bonus_money_rad ;//待分配的总剩余金额
      $bonus_money_temp = floatval(sprintf(".2f", $bonus_money_temp));
      $this->bonus[] = $bonus_money_rad;
      //echo $bonus_money_rad . ',' . $bonus_money_temp . '<hr/>';
      $i  ;
    }
    $this->bonus[] = $bonus_money_temp;//分配剩余金额给最后一个红包
  }
  //打印
  public function output(){
    $total = 0;
    foreach($this->bonus as $k => $v)
    {
      echo '红包' . ($k 1) . '=' . $v . '<br/>';
      $total  = $v;
    }
    echo '红包总金额:'.$total;
  }
}

$CBonus = new CBonus();
$CBonus->compute();
$CBonus->output();
?>

出口生机勃勃看,波动太大,那多少太无趣了!
第1个红包:0.42 元,余额:9.58 元
第2个红包:4.97 元,余额:4.61 元
第3个红包:3.13 元,余额:1.48 元
第4个红包:0.27 元,余额:1.21 元
第5个红包:0.04 元,余额:1.17 元
第6个红包:0.73 元,余额:0.44 元
第7个红包:0.34 元,余额:0.1 元
第8个红包:0.1 元,余额:0 元
精雕细刻一下,将平均值作为自由安全上限来支配波动差

摇红包神器1:懒人减腹机

正文介绍了PHP完毕Wechat红包金额拆分试玩的算法示例,分享给大家,风乐趣的能够看一下:

header(“Content-Type: text/html;charset=utf-8″);//输出不乱码,你懂的
$total = 10;//红包总额
$num = 8;// 分成8个红包,支持8人随机领取
$min = 0.01;//每个人最少能收到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.' 元;
}
echo ‘第’.$num.’个红包:’.$total.’ 元,余额:0 元';

因为你蒙受了她们!

红包1=12.36
红包2=24.37
红包3=42.71
红包4=36.92
红包5=25.84
红包6=23.17
红包7=15.92
红包8=1.35
红包9=7.75
红包10=9.61
红包总金额:200
 
红包1=24.59
红包2=17.66
红包3=29.67
红包4=32.34
红包5=12.67
红包6=37.15
红包7=17.41
红包8=15.23
红包9=6.13
红包10=7.15
红包总金额:200

for ($i = 1; $i < $num; $i  ) { 
      $safe_total = $total - ($num - $i) * $min;//随机安全上限 
      $money = mt_rand($min * 100 , $safe_total * 100) / 100; 
      $total = $total - $money; 
      echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元‘;
}
echo ‘第’.$num.’个红包:’.$total.’ 元,余额:0 元';

驾驭你干什么要不出红包啊?

示范结果:

近日几天一向再抢红包,发红包,解析了抢红包结果:
XX 领取了 11.26元
XX 领取了 50.29元
XX 领取了 28.02元
XX 领取了 0.96元
XX 领取了 5.64元
……
自家根据自身的逻辑尝试了下,这一个算法须要满足以下几点必要:
1、各种人都要力所能致提取到红包;
2、每一个人领到到的红包金额总和=总金额;
3、各样人领取到的红包金额不等,但也不可能差的太不可信赖,否则就没看头;
4、算法应当要简单。
正规编码早前,先搭建叁个推动的模型来剖析原理
设定总金额为10元,有N个人专断领取:
N=1
则红包金额=X元;
N=2
为保障第二个红包能够健康发生,第多个红包金额=0.01至9.99之内的某部随机数
第二个红包=10-第三个红包金额;
N=3
红包1=0.01至0.98之间的某部随机数
红包2=0.01至(10-红包1-0.01)的有个别随机数
红包3=10-红包1-红包2
……
到此已经找到规律,上面发轫编码
header(“Content-Type: text/html;charset=utf-8″);
$total = 10;//红包总额
$num = 8;// 分成8个红包,援助8人随便领取
$min = 0.01;//各个人起码能选用0.01元

出口结果为:
第1个红包:1.1 元,余额:8.9 元
第2个红包:0.25 元,余额:8.65 元
第3个红包:0.07 元,余额:8.58 元
第4个红包:0.42 元,余额:8.16 元
第5个红包:0.63 元,余额:7.53 元
第6个红包:0.18 元,余额:7.35 元
第7个红包:0.02 元,余额:7.33 元
第8个红包:7.33 元,余额:0 元

本文由北京赛车官方正版投注发布于广告色剂,转载请注明出处:PHP完毕微信红包金额拆分试玩的算法示例北京赛

关键词: 中国 为你 红包 知道你