Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите решить алгоритмическую задачу


Автор: iNfantry 22.2.2014, 01:18
Всем привет, помогите решить такую интересную задачку. В голове сразу зреют какието грандиозные навороченные алгоритмы, но мне кажется есть какое-то простое решение, итак...

Нужно разбить заданное число на несколько случайных чисел, количество таких чисел также задается произвольно.
Пример: разбить числов 50 на 8 СЛУЧАЙНЫХ чисел, тоесть к примеру 50 = 5+4+19+8+2+1+2+9.
Еще хотелось бы дополнительное условие добавить, чтобы куски были не больше каковото числа, например не больше 20, но для начала можно и без этого)

Автор: ElGuapo 22.2.2014, 11:40
C этой темой, думаю, нужно в раздел "Алгоритмы". Собственно про PHP вопроса не вижу.

Автор: iNfantry 22.2.2014, 14:46
Почему, мне нужен пример как раз на PHP.
Для элемента случайности вполне сойдет стандартная функция rand().

Автор: AVA12 22.2.2014, 19:13
Цитата
Почему, мне нужен пример как раз на PHP

Ну, если вопрос именно по PHP, то давай алгоритм решения и рассказывай, что не получается, а мы подскажем, как реализовать.

Автор: capitan 22.2.2014, 19:22
Код

    $num_start = $num = 50;
    $count = 8;
    $list = array();
    
    for($i=0; $i<$count-1; $i++) {
        $rand_num = mt_rand(1, $num-($count-$i));        
        $list[] = $rand_num;
        $num -= $rand_num;                
    }        
    $list[] = $num_start - array_sum($list);
    
    echo "<pre>";
    echo "Сумма: ".array_sum($list)."<br/>";
    echo "Состав: ".join(', ',$list);    
    echo "</pre>";

Логика понятна?

Автор: iNfantry 22.2.2014, 19:31
Цитата(capitan @ 22.2.2014,  19:22)
Код

    $num_start = $num = 50;
    $count = 8;
    $list = array();
    
    for($i=0; $i<$count-1; $i++) {
        $rand_num = mt_rand(1, $num-($count-$i));        
        $list[] = $rand_num;
        $num -= $rand_num;                
    }        
    $list[] = $num_start - array_sum($list);
    
    echo "<pre>";
    echo "Сумма: ".array_sum($list)."<br/>";
    echo "Состав: ".join(', ',$list);    
    echo "</pre>";

Логика понятна?

Предельно понятна, большое спасибо! Именно это мне и надо было!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)