Pierwsze pytanie tutaj, nie krzycz na mnie, jeśli jest to duplikat lub złe wyzwanie.
Wprowadzenie
Sam pomyślałem o tym wyzwaniu i wydaje się, że jest to dobra podstawowa łamigłówka dla początkujących golfistów. Może także pomóc mi zdecydować, którego języka golfowego muszę się nauczyć.
Wyzwanie
Biorąc pod uwagę tablicę liczb całkowitych mniejszych lub równych n
, wyprowadzaj lub zwracaj minimalną liczbę liczb z tablicy, które sumują się dokładnie n
.
Możesz napisać funkcję lub pełny program.
Wejście
Możesz bezpiecznie założyć 0 <= n < 2^31
.
Weź tablicę lub listę dowolnego rodzaju ( vector
dla C ++ lub Java LinkedList
są dozwolone), wraz z n
opcjonalnym parametrem length
, który określa długość tablicy.
Możesz również wziąć dane wejściowe jako ciąg oddzielony spacjami, oddzielony n
przecinkiem lub spacją:
1 5 7 3 7 3 6 3 2 6 3,10
1 5 7 3 7 3 6 3 2 6 3 10
jeśli to jest łatwiejsze.
Wynik
Wyjdź lub zwróć minimalną liczbę liczb z tablicy, które sumują się dokładnie n
. Korzystając z powyższego przykładu:
1 5 7 3 7 3 6 3 2 6 3,10
Twój program powinien wydrukować:
2
ponieważ minimalna liczba liczb, które sumują się 10
to 2
( 7
i 3
).
W przypadku braku rozwiązania, wydrukuj lub zwróć albo wartość ujemną, 0
„Brak rozwiązania” (choć nie byłoby to mądre), ∞
(jak sugerowano), lub dowolną inną wartość fałszowania, z wyjątkiem pustego ciągu.
Przykład wejścia i wyjścia
Wejście:
1 5 7 3 7 3 6 3 2 6 3,10
143 1623 1646 16336 1624 983 122,18102
5 6 9,12
Wynik:
2
3
-1
Punktacja
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.
Najlepsza odpowiedź zostanie przyjęta w Boże Narodzenie.
false
dla spraw bez rozwiązań?