「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);
}

 

posted @ 2018-01-18 00:58  mayzhi  阅读(203)  评论(0编辑  收藏  举报