2021-06-15 00:49:18 -07:00
---
id: 59713bd26bdeb8a594fb9413
2021-08-05 23:31:15 +09:00
title: Contar moedas
2021-06-15 00:49:18 -07:00
challengeType: 5
forumTopicId: 302238
dashedName: count-the-coins
---
# --description--
2021-08-05 23:31:15 +09:00
Existem quatro tipos de moedas comuns no dinheiro dos [EUA ](https://en.wikipedia.org/wiki/United_States ):
2021-06-15 00:49:18 -07:00
< ul >
2021-08-05 23:31:15 +09:00
< li > quarters (25 centavos)< / li >
< li > dimes (10 centavos)< / li >
< li > nickels (5 centavos) e< / li >
< li > pennies (1 centavo)< / li >
2021-06-15 00:49:18 -07:00
< / ul >
2021-08-05 23:31:15 +09:00
< p > Há seis maneiras de fazer troco com 15 centavos:< / p >
2021-06-15 00:49:18 -07:00
< ul >
2021-08-05 23:31:15 +09:00
< li > Um dime e um nickel< / li >
< li > Um dime e 5 pennies< / li >
2021-06-15 00:49:18 -07:00
< li > 3 nickels< / li >
2021-08-05 23:31:15 +09:00
< li > 2 nickels e 5 pennies< / li >
< li > Um nickel e 10 pennies< / li >
2021-06-15 00:49:18 -07:00
< li > 15 pennies< / li >
< / ul >
# --instructions--
2021-08-05 23:31:15 +09:00
Implemente uma função para determinar quantas maneiras há para fazer troco para uma determinada entrada, `cents` , que representa uma quantidade de centavos americanos usando essas moedas comuns.
2021-06-15 00:49:18 -07:00
# --hints--
2021-08-05 23:31:15 +09:00
`countCoins` deve ser uma função.
2021-06-15 00:49:18 -07:00
```js
assert(typeof countCoins === 'function');
```
2021-08-05 23:31:15 +09:00
`countCoins(15)` deve retornar `6` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(countCoins(15), 6);
```
2021-08-05 23:31:15 +09:00
`countCoins(85)` deve retornar `163` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(countCoins(85), 163);
```
2021-08-05 23:31:15 +09:00
`countCoins(100)` deve retornar `242` .
2021-06-15 00:49:18 -07:00
```js
assert.equal(countCoins(100), 242);
```
# --seed--
## --seed-contents--
```js
function countCoins(cents) {
return true;
}
```
# --solutions--
```js
function countCoins(cents) {
const operands = [1, 5, 10, 25];
const targetsLength = cents + 1;
const operandsLength = operands.length;
const t = [1];
for (let a = 0; a < operandsLength ; a + + ) {
for (let b = 1; b < targetsLength ; b + + ) {
// initialise undefined target
t[b] = t[b] ? t[b] : 0;
// accumulate target + operand ways
t[b] += (b < operands [ a ] ) ? 0 : t [ b - operands [ a ] ] ;
}
}
return t[targetsLength - 1];
}
```