@Evdokim001
PHP & WordPress developer

Как решить данную задачу?

Здравствуйте. Не могу уже 3 часа решить задачу. Дана сумма 400. Эта сумма должна делиться на 45 неравных частей. Оба числа будут постоянно изменяться. Пробывал через проценты, деление с остатком и простым делением. Из 45 чисел получал только до 8 нормальных чисел, все остальные в основном были меньше единицы и не целыми. Может кто знает как решить данную задачу?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
@Nc_Soft
<?php
$total = 400;
$count = 45;
$numbers = [];
do {
    $random = mt_rand(1, 1000);
    if (!array_key_exists($random, $numbers)) {
        $numbers[$random] = $random;
    }
} while (sizeof($numbers) < $count);

$sum = array_sum($numbers);
foreach ($numbers as $k => $v) {
    $numbers[$k] = $total * $v / $sum;
}

print_r($numbers);
print_r(array_sum($numbers));

Array
(
    [192] => 3.0298248382515
    [993] => 15.669875335332
    [291] => 4.592078270475
    [695] => 10.967334700963
    [718] => 11.330282468045
    [386] => 6.0912103519015
    [400] => 6.3121350796907
    [751] => 11.851033612119
    [507] => 8.000631213508
    [206] => 3.2507495660407
    [933] => 14.723055073379
    [872] => 13.760454473726
    [711] => 11.21982010415
    [890] => 14.044500552312
    [224] => 3.5347956446268
    [659] => 10.39924254379
    [899] => 14.186523591605
    [67] => 1.0572826258482
    [948] => 14.959760138867
    [976] => 15.401609594445
    [140] => 2.2092472778917
    [399] => 6.2963547419915
    [492] => 7.7639261480196
    [812] => 12.813634211772
    [572] => 9.0263531639577
    [561] => 8.8527694492662
    [834] => 13.160801641155
    [534] => 8.4267003313871
    [873] => 13.776234811425
    [143] => 2.2565882909894
    [768] => 12.119299353006
    [342] => 5.3968754931356
    [354] => 5.5862395455263
    [202] => 3.1876282152438
    [716] => 11.298721792646
    [811] => 12.797853874073
    [701] => 11.062016727158
    [987] => 15.575193309137
    [669] => 10.557045920783
    [513] => 8.0953132397033
    [706] => 11.140918415654
    [242] => 3.8188417232129
    [440] => 6.9433485876598
    [171] => 2.6984377465678
    [48] => 0.75745620956288
)
400
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ComodoHacker
А все числа должны быть целыми, положительными и разными?
Если да, то нужно проверить, что сумма всех чисел от 1 до 45 (по формуле арифметической прогрессии) не превосходит 400. Если превосходит, то сразу выдать ответ, что решения нет.
Ответ написан
@402d
начинал с бейсика на УКНЦ в 1988
S = 400 - сумма ряда
N = 45 - число членов

Smin = (1+N)*N/2

Остаток можно раскладывать с максимального числа.
Массив потом отсортировать случайным образом.
На практике хватит 12 перестановок.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы