Appearance
红黑树什么时候发生自旋?
什么时候链表转化成红黑树?
红黑树和普通的平衡查找树有什么区别?
抢红包算法设计
php
<?php
/**
* @param $totalMoney float 总金额:元
* @param $num int 红包数量
* @return array 红包列表
*/
function createRedPack(float $totalMoney,int $num)
{
//剩余的 ,单位 分
$hasMoney = $totalMoney * 100;
//一分钱
$min = 1;
$res = [];
for ($i = 1;$i <= $num;$i++)
{
if ($i != $num)
{ //剩余的钱-($num-$i)
$max = $hasMoney - ($num - $i) * $min;
// 防止每个金额差距过大
if (intval($hasMoney/($num - $i)) > 0)
{
$max = min($max,intval($hasMoney/($num - $i)));
}
$money = random_int($min,$max);
}else
{
$money = $hasMoney;
}
$hasMoney -= $money;
$res[] = $money/100;
}
//打乱
shuffle($res);
return $res;
}
$arr = createRedPack(200,10);
echo '红包结果:'.json_encode($arr).PHP_EOL;
echo '共:'.count($arr).'个'.PHP_EOL;
echo '共:'.array_sum($arr).'元'.PHP_EOL;
"输出:
红包结果:[1.37,6.63,21.67,9.4,14.49,98.55,5.44,2.93,28.64,10.88]
共:10个
共:200元
";