ca88:PHP实现微信红包金额拆分试玩的算法示例,

来源:http://www.hdxcsm.com 作者:政治头条 人气:151 发布时间:2019-08-09
摘要:本文介绍了PHP达成微信红包金额拆分试玩的算法示例,分享给大家,风乐趣的能够看一下: 新近几天平昔再抢红包,发红包,解析了抢红包结果: XX 领取了 11.26元 XX 领取了 50.29元 XX

ca88 1

本文介绍了PHP达成微信红包金额拆分试玩的算法示例,分享给大家,风乐趣的能够看一下:

新近几天平昔再抢红包,发红包,解析了抢红包结果:
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元

对待近期大家都被双十一火把红包刷屏了呢,尽管各种人都在玩火炬红包,但是过多少人都非常少都不明白火炬红包的各样条条框框,以后大家就解读一下火把红包的游戏的方法!

二〇一八年,大家的生活会如何改换?惠农新政有啥?惠农“红包”有多宽?AI主播为你划重点、数“红包”。全息投影 3D……带您看份“三个维度立体生长”的当局专门的工作报告。

<?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();
?>
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 元';

火炬红包计策:

身体力行结果:

出口一看,波动太大,那多少太无趣了!
第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 元
勘误一下,将平均值作为自由安全上限来决定波动差

2、怎么着获得待点亮火炬红包?

红包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

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)进店找红包:你的火炬红包最左边的厂商点击步入有可能率找到待点亮红包(每一日商店搜红包上线是四十五个)

出口结果为:
第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 元

(2)红包互助:支持好朋友点亮红包自身就能够得一个待点亮红包,帮人正是帮团结,请不要屡次操作,要不然会不能够帮旁人点亮

3、点亮红包的秘籍:

点亮红包的方法有三种:请人帮你点亮(大致天天都有有稀有红包被点亮);和亲密的朋友互抽能抽到别人的已经点亮的红包(或许是平日红包、稀有红包恐怕传奇红包);充钱红包(3月1日上马)必定取得五个已点亮红包(依照充钱额度扩充高档位红包可能率,换句话说你充钱了几百块也或然只是获得一个惯常红包)。

4、为何人家不可能帮小编点亮火炬红包?

您能够帮你八个好朋友点亮红包,但每两位同一用户之间,只限互相相互点亮红包各贰回。2、5、每人最多可获取多少个火炬红包?

单个用户红包数量上限100个,用户获得待点亮红包并不表示实际已获得红包,最终须在运动时期内成功点亮方可获得已点亮红包。已点亮红包数量达到上限后,全部待点亮红包作废。

6、双十一火把红包活动如哪一天候开奖?

火炬红包活动的开奖时间为前年一月十一日19:50,开奖后,瓜分红包甘休时间为三月十二十一日10:00,逾期未领到将无法赢得红包。

7、火炬红包彩蛋有怎样?

各类火炬红包均匀机遇抢得彩蛋,点击彩蛋可步向各样公司获得惊喜奖品,饱含:双11购物津贴、晚上的集会门票、商城打折券。

8、火炬红包互抽的平整?

(1)具备3个及以上点亮红包才可参加

(2)通过扫描外人二维码后,可与别人实行互抽

(3)互抽双方分别从对方的3张红包中分别抽取一张达成操作

(4)收取完成后,展现对方互抽取红利包,被抽中的红包调换来对方的红包中

9、怎样充红包得火炬红包?

10月1日0点起来,每充壹次红包必定取得二个火把红包,充红包的金额将变为等额双十一新一款红包,所获取的火炬红包将向来点亮。

充红包档位:

充5元现金红包必定获得三个平时火炬红包

充10元现法国红包有可能率额外获取稀缺红包

充30元现葡萄紫包非常差没有多少率额外得到难得红包

充50元现威新奥尔良红包有可能率额外获取典故红包

汇总上述的艺术,最可行的点亮红包的不二秘诀就是互为支持点,不过的确是内需消耗时间精力的哦!加V信群 来相互点亮把!

ca88 2

万一想撸越来越多红包的用户请关注双十一红包战术专项论题:,大家将会立刻更新双十一红包免单半价音讯,还会有关于双十一的有个别连锁新闻!

本文由ca88发布于政治头条,转载请注明出处:ca88:PHP实现微信红包金额拆分试玩的算法示例,

关键词: ca88

最火资讯