URI Online Judge | 1021
Notas e Moedas
Leia um valor de ponto flutuante com duas casas decimais. Este valor representa um valor monetário. A seguir, calcule o menor número de notas e moedas possíveis no qual o valor pode ser decomposto. As notas consideradas são de 100, 50, 20, 10, 5, 2. As moedas possíveis são de 1, 0.50, 0.25, 0.10, 0.05 e 0.01. A seguir mostre a relação de notas necessárias.
Soluções para a tarefa
#include <stdio.h>
int main()
{
double A, E;
scanf ("%lf",&A);
int N,a,b,c,d,e,f,g,h,i,j,k,l,B,m,n,o,p,q,r,s,t,u;
N=A;
a=N/100;
b=N%100;
c=b/50;
d=b%50;
e=d/20;
f=d%20;
g=f/10;
h=f%10;
i=h/5;
j=h%5;
k=j/2;
l=j%2;
E=A*100;
B=(int) E;
m=B%100;
n=m/50;
o=m%50;
p=o/25;
q=o%25;
r=q/10;
s=q%10;
t=s/5;
u=s%5;
printf ("NOTAS:\n");
printf ("%d nota(s) de R$ 100.00\n",a);
printf ("%d nota(s) de R$ 50.00\n",c);
printf ("%d nota(s) de R$ 20.00\n",e);
printf ("%d nota(s) de R$ 10.00\n",g);
printf ("%d nota(s) de R$ 5.00\n",i);
printf ("%d nota(s) de R$ 2.00\n",k);
printf ("MOEDAS:\n");
printf ("%d moeda(s) de R$ 1.00\n",l);
printf ("%d moeda(s) de R$ 0.50\n",n);
printf ("%d moeda(s) de R$ 0.25\n",p);
printf ("%d moeda(s) de R$ 0.10\n",r);
printf ("%d moeda(s) de R$ 0.05\n",t);
printf ("%d moeda(s) de R$ 0.01\n",u);
return 0;
}
Resposta:
JavaScrip (Explicação abaixo):
let [ value ] = lines.map( Number )
let options = [
100, 50, 20, 10, 5, 2,
1, 0.5, 0.25, 0.1, 0.05, 0.01
]
let pCedula = true
let pMoeda = true
options.forEach ( ( opt ) => {
let quantidade = Math.floor ( value / opt )
value = ( value % opt ).toFixed( 2 )
if ( opt > 1 ) {
if ( pCedula ) {
console.log( "NOTAS:" )
pCedula = false
}
console.log( `${ quantidade } nota(s) de R$ ${ opt.toFixed( 2 ) }` )
} else {
if ( pMoeda ) {
console.log( "MOEDAS:" )
pMoeda = false
}
console.log( `${ quantidade } moeda(s) de R$ ${ opt.toFixed( 2 ) }` )
}
} )
Explicação:
value recebe o valor do input e usa o map( Number ) para transformar a entrada em um número
options recebe uma lista de valores referente a cada nota e moeda possível
pMoeda e pCedula são para verificar se é a primeira moeda/cédula e escrever no console
forEach passa por cada valor de options passando o valor atual para uma variável opt.
quantidade recebe o valor de notas mínimas da nota atual para o valor inteiro da divisão de value / opt
value agora recebe o valor do resto da divisão pelo valor da nota atual ( value % opt ) usando a função toFixed( 2 ) para realizar o arredondamento das 2 casas decimais evitando erros causados por essas casas decimais
if decide se a saída será de uma cédula ou se será de uma moeda.