За последние 24 часа нас посетили 17778 программистов и 1653 робота. Сейчас ищут 1697 программистов ...

алгоритм деления числа на заданное количество неравных часте

Тема в разделе "Решения, алгоритмы", создана пользователем GrayRF1, 3 июл 2013.

  1. GrayRF1

    GrayRF1 Новичок

    С нами с:
    16 июн 2013
    Сообщения:
    3
    Симпатии:
    0
    Подскажите пожалуйста, нужен алгоритм , либо готовая реализация деления числа на заданное количество неравных частей даже не неравных, а скорей рандомных, желательно чтобы разброс у полученных чисел был небольшой.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: алгоритм деления числа на заданное количество неравных ч

    подсказываю:
    делишь число на рандом
    оставшееся делишь на рандом
    оставшееся делишь на рандом...
     
  3. GrayRF1

    GrayRF1 Новичок

    С нами с:
    16 июн 2013
    Сообщения:
    3
    Симпатии:
    0
    Re: алгоритм деления числа на заданное количество неравных ч

    Спасибо конечно за ответ, по сути да это будет неравные рандомные по значению части, но все равно немного не то, что нужно для меня. Вот нашел хорошее решение
    http://stackoverflow.com/questions/14959200/dividing-a-numb ... qual-parts
    набросал реализацию - может кому-нибудь пригодится
    Код (Text):
    1.  
    2. print_r(get_unequal_parts(500, 7));
    3.  
    4. function get_unequal_parts($sum, $parts){
    5.  
    6.     //для ограничения диапазона
    7.     $div = round($sum/$parts);
    8.     $min_range = $div - round($div/2);
    9.     $max_range = $div + round($div/2);
    10.    
    11.     $r = array();
    12.     $sum_r = 0;
    13.  
    14.     for($i = 1; $i < $parts + 1; $i++){
    15.         $r[$i] = rand($min_range, $max_range);
    16.         $sum_r = array_sum($r);
    17.     }
    18.  
    19.     for ($i = 1; $i < $parts; $i++) {
    20.         $temp[$i] = round($r[$i]/$sum_r*$sum);   
    21.     }
    22.     $temp[$parts] = $sum - array_sum($temp);
    23.  
    24.     return $temp;  
    25. }
     
  4. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Re: алгоритм деления числа на заданное количество неравных ч

    Код (Text):
    1. print_r(get_unequal_parts(500, 7));
    2.  
    3. function get_unequal_parts($number, $parts) {
    4.     for ($i = 1; $i <= $parts; $i++) {
    5.         $randNums[] = mt_rand();
    6.     }
    7.     $sum = array_sum($randNums);
    8.  
    9.     foreach ($randNums as $randNum) {
    10.         $result[] = $number * $randNum / $sum;
    11.     }
    12.  
    13.     return $result;
    14. }