「PHP 版」群发红包算法
面试中的一个问题, 当时在纸上用伪代码描述了下实现的原理. 回来后用代码实现了下. 有不完善或需要改进的地方, 欢迎拍砖 :)
<?php fwrite(STDOUT, "请输入红包金额:"); $money = fgets(STDIN) + 0; if ( !is_numeric($money) || $money < 0.01) { echo "输入的金额不对\n"; exit(); } echo "红包金额为 $money\n"; fwrite(STDOUT, "请设置红包个数:"); $num = fgets(STDIN) + 0; if ( !is_int($num) || $num <= 0 || (round($money / $num, 3) < 0.01)) { echo "输入的红包个数不对\n"; exit(); } echo "红包个数为 $num\n"; if ($num == 1) { echo "输出红包 $money\n"; } elseif ($money / $num == 0.01) { $i = 0; while ($i < $num) { $arr[] = 0.01; $i++; } print_r($arr); } else { $i = 0; while ($i < $num) { $arr[] = mt_rand(1, 100); $i++; } $sum = array_sum($arr); foreach ($arr as $key => $value) { $arr[$key] = round($value / $sum * $money, 2); } print_r($arr); }