如下需求
需要将1元的红包,拆分成10个,每一个红包的金额均不相等,接受用户的输入 个数和金额,并且红包个数的最小金额,和最大金额不能大于输入金额。
代码实现如下
/**
* 获取随机红包(符合正态分布)
* @param float $min 红包最小值
* @param float $max 红包最大值
* @param integer $num 红包个数
* @param float $total 红包金额
* @return array
*/
function rand_red($min,$max,$num,$total){
$data = [];
if ($min * $num > $total) {
return [];
}
if($max*$num < $total){
return [];
}
while ($num >= 1) {
$num--;
$kmix = max($min, $total - $num * $max);
$kmax = min($max, $total - $num * $min);
$kAvg = $total / ($num + 1);
//获取最大值和最小值的距离之间的最小值
$kDis = min($kAvg - $kmix, $kmax - $kAvg);
//获取0到1之间的随机数与距离最小值相乘得出浮动区间,这使得浮动区间不会超出范围
$r = ((float)(rand(1, 10000) / 10000) - 0.5) * $kDis * 2;
$k = sprintf("%.2f", $kAvg + $r);
$total -= $k;
$data[] = $k;
}
return $data;
}
$data = rand_red(0.01,0.5,10,1);
var_dump($data);
//输出红包总额
echo array_sum($data);
由于微信红包的火热,一些红包爱好者就出现了红包扫雷的菠菜玩法,有群红包、H5游戏,可以是手气佳者、也可以是尾数符合者,玩法多种多样。
而一般脱离微信外的程序、游戏、网页、APP、都是差不多跟机器人在玩,前期让你赚钱,后期慢慢割你韭菜,和币圈合约是一个道理。
后期会持续更新和剖析扫雷红包机器人和其通过盈亏比例调节割韭菜等细节
网友评论