Функция возвращающая оптимальную суму

Нужно реализовать функцию которая возвращает оптимальный результат. К примеру, есть общая сума 150 и нужно вернуть общую сумму элементов(list) которые максимально приближенны к ней.

Есть функция returnSum которая принимает следующие аргументы: sum - максимальная сума, amount - количество элементов, list - список элементов

const returnSum = (sum, amount, list) => {

// code

return null;

}

returnSum(174, 3, [51, 56, 58, 59, 61]); //173
returnSum(163, 3, [50]); // null

Примерно так должно выглядеть, не могу понять каким образом это реализовать


Ответы (1 шт):

Автор решения: Алексей Шиманский

Да делать как и любую задачу на поиска максимума/минимума

  • задаётся переменная где будет храниться дельта. инициализируем нулём. Ну и например переменную, которая хранит сумму чисел.

  • идём циклом от начала в конец или от конца в начало, берём по три элемента и суммируем их.

  • находим дельту от суммы трёх чисел и сравниваемого числа. записываем в переменную, сумму - в переменную с суммой

  • на следующих итерациях всё так же берём по три числа, находим дельту и сравниваем с дельтой в переменной. Если меньше - то пишем её и сумму в сумму.

остальные проверки уже дело десятое


А в целом, нужно брать по три числа всегда - это единственную проблему, которую тут нужно решить, на мой взгляд.

51, 56, 58, 59, 61:

51, 56, 58
51, 56, 59,
51, 56, 61
51, 58, 59
51, 58, 61
51, 59, 61
56, 58, 59
56, 58, 61
56, 59, 61
58, 59, 61
→ Ссылка