Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сгенерировать случайные числа.
 
 автор: man1   (15.12.2011 в 01:53)   письмо автору
 
 

Приветствую всех!

Подскажите как можно сгенерировать случайные числа. Сейчас объясню подробнее:

Скажем, есть 33 человека, на 3 из них приходится 50% активности за все время, а на других - оставшиеся 50%. Нужно эти оставшиеся 50% раскидать В СЛУЧАЙНОМ порядке на каждого из 30 оставшихся человек.

Как такое можно реализовать?

  Ответить  
 
 автор: Valick   (15.12.2011 в 01:58)   письмо автору
 
   для: man1   (15.12.2011 в 01:53)
 

нулевого уровня активности я так понимаю нет? тогда нужна стартовая величина активности.

  Ответить  
 
 автор: man1   (15.12.2011 в 02:00)   письмо автору
 
   для: Valick   (15.12.2011 в 01:58)
 

Да, все верно.
Всего 33 пользователя.
Стартовая величина = 100%: 50% сразу уходят на 3 пользователей, оставшиеся 50% - на 30 пользователей (но в случайном порядке.)

  Ответить  
 
 автор: Valick   (15.12.2011 в 02:03)   письмо автору
 
   для: man1   (15.12.2011 в 02:00)
 

нет вы не поняли
минимальная величина активности какая?
вам же нужно именно вслучайном порядке, а не поровну на всех

  Ответить  
 
 автор: Valick   (15.12.2011 в 02:17)   письмо автору
 
   для: 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
и так далее поочередно отнимая (и суммируя в банк) и прибавляя к очередному пользователю и отнимая из банка, последнему плюсуем весь остаток из банка
в конце мы получаем массив который можно перемешать и присвоить значения уже конкретным пользователям

  Ответить  
 
 автор: cheops   (15.12.2011 в 02:06)   письмо автору
 
   для: man1   (15.12.2011 в 01:53)
 

Если я правильно понял задачу, можно начать отталкиваться от следующего скрипта
<?php
  $total 
33 3;
  
$sum 50;
  
// Генерируем массив случайных чисел
  
$arr = array();
  for(
$i 0$i $total$i++)
  {
    
$arr[] = rand(0100);
  }
  
// Нормируем полученный массив
  
$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>";
?>

  Ответить  
 
 автор: man1   (15.12.2011 в 02:12)   письмо автору
 
   для: cheops   (15.12.2011 в 02:06)
 

Да, именно то что нужно. Спасибо.

Хитрые математические действия)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования