日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

离散数学模拟微信红包算法升级版

發布時間:2024/1/8 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 离散数学模拟微信红包算法升级版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可以自定義紅包總金額,總包數,每包最小金額

<?php/*** 紅包類*/class RedPacket{// 要發的紅包總金額private $total = 0.01;// 總共要發紅包總包數private $bags = 1;// 每包最小紅包金額數private $min = 0.01;function __construct($total, $bags, $min){$this->total = $total;$this->bags = $bags;$this->min = $min;}/*** [發紅包]* @return [array] [紅包的每包金額數組]*/public function give_red_packets(){$redpacket_arr = [];//根據最小值不一樣,需要轉化switch (true) {case $this->min >= 1:$right_value = 1;break;case $this->min >= 0.1:$right_value = 10;break;case $this->min >= 0.01:$right_value = 100;break;}for($i = 1;$i < $this->bags;$i++){//設置循環,邊界值是紅包數-1//保證后面至少有($bags - $i)個最小金額可以發,通過公式模擬數學中的離散模型$safe = bcdiv(($this->total - ($this->bags - $i) * $this->min), ($this->bags - $i), 2);//根據離散數學模型得到每個紅包的金額$rand = rand(0, bcmul($safe - $this->min, $right_value, 2)) + $this->min;//如果大于倍值,需要轉化,反之,不需要。為了防止有的紅包金額小于設定的最小金額if ($rand >= ($this->min * $right_value)) {$money = bcdiv($rand, $right_value, 2);} else {$money = strval($rand);}$this->total -= $money; //替換$total的值$redpacket_arr[] = number_format($money, 2);//把每個紅包金額數格式化,存起來}$left = number_format($this->total, 2);//調用number_format()方法,對數字$total格式化$redpacket_arr[] = $left;//輸出最后一個紅包return $redpacket_arr;}}//發紅包$redpacket = new RedPacket(881.88, 20, 1.5);$redpacket_arr = $redpacket->give_red_packets();echo '<pre>';print_r($redpacket_arr);print_r('紅包總金額:' . array_sum($redpacket_arr));echo '</pre>';

881.88元,20包,每包至少1.5元

效果截圖:

100元,33包,每包至少0.01元

總結

以上是生活随笔為你收集整理的离散数学模拟微信红包算法升级版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。