Problema
Ver original (inglês)Use qualquer quantidade de cada denominação fornecida para formar exatamente o valor desejado. Conte combinações, não ordenações: dois arranjos que usam as mesmas quantidades de cada moeda contam como a mesma forma. As denominações são distintas e positivas.
Implemente coin_sums(amount, coins).
Entrada
amount: O valor total a ser formado.
coins: As denominações distintas disponíveis.
Saída
Retorne o número de combinações não ordenadas.
Restrições
0 ≤ amount ≤ 200. Existem de 0 a 10 denominações distintas, cada uma de 1 a 200. Todos os resultados cabem em um inteiro assinado de 64 bits. Para amount 0, existe uma forma: escolher nenhuma moeda.
Exemplos
Entrada:
coins = [1, 2]
amount = 4
Saída esperada:
expected = 3
Entrada:
std::vector<long long> coins = {1, 2};
long long amount = 4;
Saída esperada:
long long expected = 3;
Entrada:
long[] coins = new long[] {1, 2};
long amount = 4;
Saída esperada:
long expected = 3;
Explicação
As combinações são quatro moedas de 1, duas de 1 com uma de 2, e duas de 2.
Entrada:
coins = [2]
amount = 3
Saída esperada:
expected = 0
Entrada:
std::vector<long long> coins = {2};
long long amount = 3;
Saída esperada:
long long expected = 0;
Entrada:
long[] coins = new long[] {2};
long amount = 3;
Saída esperada:
long expected = 0;
Explicação
Qualquer soma de moedas de valor 2 é par, então 3 é impossível.
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.