Ir ao conteúdo

Posts recomendados

Postado

Galera, boa noite, há um desafio que consegui fazer, porém queria ter uma visão mais "light" do código que executasse o mesmo processo...


Desafio

Faça a leitura de um valor inteiro. Em seguida, calcule o menor número de notas possíveis (cédulas) onde o valor pode ser decomposto. As notas que você deve considerar são de 100, 50, 20, 10, 5, 2 e 1. Na sequência mostre o valor lido e a relação de notas necessárias.


Entrada

Você receberá um valor inteiro N (0 < N < 1000000).


Saída

Exiba o valor lido e a quantidade mínima de notas de cada tipo necessárias, seguindo o exemplo de saída abaixo. Após cada linha deve ser imprimido o fim de linha.


Se a entrada for 576 a saída será...

576
5 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
1 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
0 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00


Fiz o código e funcionou, mas ficou carregado de IF's

 

let valor = 576;

let nota100 = 0;
let nota50 = 0;
let nota20 = 0;
let nota10 = 0;
let nota5 = 0;
let nota2 = 0;
let nota1 = 0;

let valor_aux = valor;

while (valor != 0)
{
  if ( valor >= 100 ) { valor -= 100; nota100 += 1; }
  else  if ( valor >= 50 ) { valor -= 50; nota50 += 1; }
        else  if ( valor >= 20 ) { valor -= 20; nota20 += 1; }
              else  if ( valor >= 10 ) { valor -= 10; nota10 += 1; }
                    else  if ( valor >= 5 ) { valor -= 5; nota5 += 1; }
                          else  if ( valor >= 2 ) { valor -= 2; nota2 += 1; }
                                else if ( valor >= 1 ) { valor -= 1; nota1 += 1; }
}

console.log( valor_aux );
console.log( nota100 + " nota(s) de R$ 100,00");
console.log( nota50 + " nota(s) de R$ 50,00");
console.log( nota20 + " nota(s) de R$ 20,00");
console.log( nota10 + " nota(s) de R$ 10,00");
console.log( nota5 + " nota(s) de R$ 5,00");
console.log( nota2 + " nota(s) de R$ 2,00");
console.log( nota1 + " nota(s) de R$ 1,00");


Consegui reduzir o código, mas estou com dificuldade pra corrigir no bloco do while e if onde não consigo fazer com que o identificador "valor" permanecesse, exemplo, 576 - 500 = 76, ele não permanece os 76, simplesmente reinicia o valor:

 

let valor = 576;
let nota = [100, 50, 20, 10, 5, 2, 1];
let contador = [];
let contador_aux = valor;
for( let a = 0; a < 7; a++ )
{ 
    while( valor >= nota[a] )
    { 
        if( valor >= nota[a] )
        {
            valor -= nota[a];
            contador_aux += 1;
            contador[a] = contador_aux;
        }
    }
}
console.log( valor_aux );
for (let i = 0; i < 7; i++)
{
    console.log( contador[i] + " nota(s) de R$ " + nota[i] + ",00");
}

 

Postado

Fiz vários testes aqui, e a proposta abaixo parece funcionar:

 

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sem título</title>
</head>

<body>

<script>
let valor = 576;
let nota = [100, 50, 20, 10, 5, 2, 1];
let contador = [0,0,0,0,0,0,0];
let a = 0;
    while( a <= 7 )
    { 
       if (nota[a] <= valor) {
          valor = valor-nota[a];
          contador[a] = contador[a] + 1;          
       } else { a++ }         
    }

for (let i = 0; i < 7; i++)
{
    console.log( contador[i] + " nota(s) de R$ " + nota[i] + ",00");
}
</script>

</body>
</html>


Mas para ter certeza, teste melhor por favor para ver se não tem nenhum erro de lógica na minha proposta.


Abraços.

  • Amei 1
Postado

Resolveu muito. Entendi o que foi feito, mais ainda o porque do código constantemente falar para definir o contador, mas não entendia como. a eliminação do for e usar apenas o a na de repetição while. Ajudou demais e aprendi muito com estas alterações.

 

Muito agradecido @Marcelo Calazans.

Postado
26 minutos atrás, GustavoHCS disse:

Resolveu muito. Entendi o que foi feito, mais ainda o porque do código constantemente falar para definir o contador, mas não entendia como. a eliminação do for e usar apenas o a na de repetição while. Ajudou demais e aprendi muito com estas alterações.

 

Muito agradecido @Marcelo Calazans.

Que bom que gostou. Disponha amigo!!

  • Curtir 1
  • 3 semanas depois...
Postado

Achei legal o desafio, então tomei a liberdade de fazer aqui(na real eu estou morrendo de tédio e estava desesperadamente procurando algo para fazer as 05:07 depois de uma longa madrugada fazendo absulamente NADA), bom... O plano inicial era fazer por diversão na base da gambiarra com todos os cálculos em uma única linha, mas acabei usando o map, fiz a diversão para pegar a quantidade de notas e pegando o resto da divisão para as próximas divisões, pareceu mais amigável.

 

let money = 576
// Você pode colocar um 200 do lado esquerdo do 100 caso queira aumentar a quantidade de notas. :D  
const notas = [100, 50, 20, 10, 5, 2, 1]
notas.map((nota) => {
  // ~~ é apenas para tirar os valores decimais da divisão 
  console.log(`${~~(money/nota)} nota(s) de R$ ${nota}`)
  money = money%nota
})

 

Dessa forma o código ficou mais limpo, tratei a array usando o map então fica mais fácil adicionar e remover notas/moedas, na verdade, você pode adicionar quantas quiser, inclusive moedas.

 

Segue o exemplo com todas as moedas Brasileiras(O limite é sua imaginação, acredito eu '-'):

//Coloquei 388.91 para que seja possivel dividir 1 para todos :D 
let money = 388.91
const notas = [200, 100, 50, 20, 10, 5, 2, 1, 0.50, 0.25, 0.10, 0.05]
notas.map((nota) => {
  console.log(`${~~(money/nota)} ${money%nota >= 1 ? 'nota(s)': 'moeda(s)'} de R$ ${nota}`)
  money = money%nota
})

 

Você consegue reduzir 1 linha deletado a const notas e passando a Array direto no map :D

 

Edit: Se o código tiver errado a culpa é do sono.

 

 

  • Haha 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...