|
|
|
| Приветствую всех!
Подскажите как можно сгенерировать случайные числа. Сейчас объясню подробнее:
Скажем, есть 33 человека, на 3 из них приходится 50% активности за все время, а на других - оставшиеся 50%. Нужно эти оставшиеся 50% раскидать В СЛУЧАЙНОМ порядке на каждого из 30 оставшихся человек.
Как такое можно реализовать? | |
|
|
|
|
|
|
|
для: man1
(15.12.2011 в 01:53)
| | нулевого уровня активности я так понимаю нет? тогда нужна стартовая величина активности. | |
|
|
|
|
|
|
|
для: Valick
(15.12.2011 в 01:58)
| | Да, все верно.
Всего 33 пользователя.
Стартовая величина = 100%: 50% сразу уходят на 3 пользователей, оставшиеся 50% - на 30 пользователей (но в случайном порядке.) | |
|
|
|
|
|
|
|
для: man1
(15.12.2011 в 02:00)
| | нет вы не поняли
минимальная величина активности какая?
вам же нужно именно вслучайном порядке, а не поровну на всех | |
|
|
|
|
|
|
|
для: man1
(15.12.2011 в 02:00)
| | в общем алгоритм примерно такой
делим 50 на 30, получаем процент активности "поровну на всех" 1,67
теперь берем первого юзверя и отнимаем от его активности любую величину, от стартового уровня (нулем я так понимаю быть не может) например 0.5 до 1.67
$b=1.67- rand (0, 1.67-0.5);
ту величину которую мы отняли кладем в банк
и следующему юзеру, мы прибавляем рандомное значение из этого банка от 0 до max
и так далее поочередно отнимая (и суммируя в банк) и прибавляя к очередному пользователю и отнимая из банка, последнему плюсуем весь остаток из банка
в конце мы получаем массив который можно перемешать и присвоить значения уже конкретным пользователям | |
|
|
|
|
|
|
|
для: man1
(15.12.2011 в 01:53)
| | Если я правильно понял задачу, можно начать отталкиваться от следующего скрипта
<?php
$total = 33 - 3;
$sum = 50;
// Генерируем массив случайных чисел
$arr = array();
for($i = 0; $i < $total; $i++)
{
$arr[] = rand(0, 100);
}
// Нормируем полученный массив
$sumarr = array_sum($arr);
for($i = 0; $i < count($arr); $i++)
{
$arr[$i] = $arr[$i] * $sum / $sumarr;
}
// Всего распределили
echo array_sum($arr);
// Распределение
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(15.12.2011 в 02:06)
| | Да, именно то что нужно. Спасибо.
Хитрые математические действия) | |
|
|
|