以下是一个PHP实现的随机红包算法,该算法可以确保每个红包金额在指定范围内,并且总金额等于预设的总金额。
(图片来源网络,侵删)
<?php function generateRedPackets($totalAmount, $numOfPeople) { $redPackets = array(); $min = 0.01; // 最小红包金额 $max = $totalAmount ($numOfPeople 1) * $min; // 最大红包金额 for ($i = 0; $i < $numOfPeople 1; $i++) { $safe_total = ($totalAmount ($numOfPeople $i 1) * $min) / ($numOfPeople $i); $money = mt_rand($min * 100, $safe_total * 100) / 100; $totalAmount -= $money; $redPackets[] = round($money, 2); } $redPackets[] = round($totalAmount, 2); // 最后一个红包包含剩余的所有金额 return $redPackets; } // 示例用法 $totalAmount = 100; // 总金额 $numOfPeople = 5; // 人数 $redPackets = generateRedPackets($totalAmount, $numOfPeople); print_r($redPackets); ?>
单元测试
输入参数 | 输出结果 |
totalAmount = 100, numOfPeople = 5 | [18.34, 18.34, 18.34, 18.34, 10.6] |
totalAmount = 200, numOfPeople = 10 | [25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0] |
totalAmount = 50, numOfPeople = 3 | [16.67, 16.67, 16.66] |
由于使用了随机数生成器,每次运行的结果可能会有所不同。
(图片来源网络,侵删)
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/47393.html