Первый вопрос здесь, не кричите на меня, если это дубликат или плохой вызов.
Вступление
Я сам подумал об этой задаче, и она кажется хорошей основной головоломкой для начинающих любителей кода. Это также может помочь мне решить, какой язык для игры в коде изучать.
Вызов
Учитывая массив целых чисел, которые меньше или равны n
, выведите или верните минимальное количество чисел из массива, которые в сумме точно n
.
Вы можете написать функцию или полную программу.
вход
Вы можете смело предполагать 0 <= n < 2^31
.
Возьмите массив или список любого вида ( vector
для C ++ или Java LinkedList
допускается) вместе с n
необязательным параметром length
, который указывает длину массива.
Вы также можете принять входные данные в виде строки, разделенной пробелами, отделенной n
запятой или пробелом:
1 5 7 3 7 3 6 3 2 6 3,10
1 5 7 3 7 3 6 3 2 6 3 10
если проще.
Выход
Выведите или верните минимальное количество чисел из массива, которые в сумме составляют в точности n
. Используя приведенный выше пример:
1 5 7 3 7 3 6 3 2 6 3,10
Ваша программа должна напечатать:
2
так как минимальное количество чисел, сумма до 10
это 2
( 7
и 3
).
В случае, если решения не существует, выведите или верните либо отрицательное значение, 0
«Без решения» (хотя это не было бы разумно), ∞
(как предложено), либо любое другое ложное значение, за исключением пустой строки.
Пример ввода и вывода
Входные данные:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Выход:
2
3
-1
счет
Это код-гольф, поэтому выигрывает самый короткий код в байтах.
Главный ответ будет принят на Рождество.
false
для случаев без решений?