No internet connection
  1. Home
  2. Dúvidas Gerais

Lista 2 - 1021 do beecrowd

Por Gabriela Daniel Moura @gabimoura
    2023-10-24 16:35:57.460Z

    Gente não faz sentido, coloquei no vscode meu código e ta pegando exatamente como a resposta quer e no beecrowd não pega, o que eu faço?

    var input = require('fs').readFileSync('/dev/stdin', 'utf8');
    var lines = input.split('\n');

    /**

    • Escreva a sua solução aqui
    • Code your solution here
    • Escriba su solución aquí
      */

    const valor = parseFloat(lines.shift());

    const mod100 = valor % 100;
    const mod50 = mod100 % 50;
    const mod20 = mod50 % 20;
    const mod10 = mod20 % 10;
    const mod5 = mod10 % 5;
    const mod2 = mod5 % 2;
    const moe1 = mod2 % 1;
    const moe50 = moe1 % 0.50;
    const moe25 = moe50 % 0.25;
    const moe10 = moe25 % 0.10;
    const moe5 = moe10 % 0.05;

    const notas100 = Math.floor(valor / 100);
    const notas50 = Math.floor(mod100 / 50);
    const notas20 = Math.floor(mod50 / 20);
    const notas10 = Math.floor(mod20 / 10);
    const notas5 = Math.floor(mod10 / 5);
    const notas2 = Math.floor(mod5 / 2);
    const moedas1 = Math.floor(mod2 / 1);
    const moedas50 = Math.floor(moe1 / 0.50);
    const moedas25 = Math.floor(moe50 / 0.25);
    const moedas10 = Math.floor(moe25 / 0.10);
    const moedas5 = Math.floor(moe10 / 0.05);
    const moedas01 = Math.floor(moe5 / 0.01);

    console.log('NOTAS:');
    console.log(${notas100} nota(s) de R$ 100.00);
    console.log(${notas50} nota(s) de R$ 50.00);
    console.log(${notas20} nota(s) de R$ 20.00);
    console.log(${notas10} nota(s) de R$ 10.00);
    console.log(${notas5} nota(s) de R$ 5.00);
    console.log(${notas2} nota(s) de R$ 2.00);
    console.log('MOEDAS:');
    console.log(${moedas1} moeda(s) de R$ 1.00);
    console.log(${moedas50} moeda(s) de R$ 0.50);
    console.log(${moedas25} moeda(s) de R$ 0.25);
    console.log(${moedas10} moeda(s) de R$ 0.10);
    console.log(${moedas5} moeda(s) de R$ 0.05);
    console.log(${moedas01} moeda(s) de R$ 0.01);

    Resolvido no post #2, clique para visualizar
    • 14 respostas
    1. Oi Gabriela, fiz esse post sobre esse exercício, teve até mais contribuições com a solução.
      Notas e Moedas - Dica

      tenta assim:

      const moedas01 = Math.floor(Math.round(moe5 / 0.01));
      
      1. GGabriela Daniel Moura @gabimoura
          2023-10-24 16:45:22.691Z

          meu deussssss, me salvou demais, já tava aqui quebrando a cabeça sem entender nada. Muito obrigada!!

          1. Em resposta amarceleeller:
            marcelo jhones @MarceloJhonesDev
              2023-10-25 12:09:19.488Z

              Boa, e isso acontece porque cada vez que você vai "quebrando" o valor passado com as operações de mod fica uma sobra no final e se você não arredondar o valor na última operação as vezes sobra por exemplo 0,019 que sem arredondar ao dividir por 0.01 retorna o valor de 1, ou seja 1 moeda de 1 centavo. Mas ainda ficou sobrando 0.009 que é quase que 1 centavo. Ou seja com o arredondamento são retornado 2 moedas de 1 centavo.

              1. Em resposta amarceleeller:

                Ajudou muito!! Estava quebrando a cabeça, pois estava usando Math.trunc() e estava dando erro no último cálculo. Obrigada!

                1. Em resposta amarceleeller:
                  TTom Silva @TomSilva
                    2023-10-30 13:12:50.787Z

                    Também tive bastante dificuldade com esse exercício, so da erro na ultima linha do valor "0.1", vai me ajudar muito esse post

                  • Em resposta agabimoura:
                    Daniel Carvalho @DanielCarvalho
                      2023-10-25 12:54:36.755Z

                      oi gabriela essa questão eu fiz um pouco diferente vou deixar aqui como exemplo, abs.

                      let num = parseFloat(lines[0]);

                      let nota100 = parseInt(num / 100);
                      let resto = parseFloat(num % 100);

                      let nota50 = parseInt(resto / 50);
                      resto = resto % 50;

                      let nota20 = parseInt(resto / 20);
                      resto = resto % 20;

                      let nota10 = parseInt(resto / 10);
                      resto = resto % 10;

                      let nota5 = parseInt(resto / 5);
                      resto = resto % 5;

                      let nota2 = parseInt(resto / 2);
                      resto = resto % 2;

                      let moeda1 = parseInt(resto / 1);
                      resto = resto % 1;

                      let moeda50 = parseInt(resto / 0.5);
                      resto = resto % 0.5;

                      let moeda25 = parseInt(resto / 0.25);
                      resto = resto % 0.25;

                      let moeda10 = parseInt(resto / 0.1);
                      resto = resto % 0.1;

                      let moeda5 = parseInt(resto / 0.05);
                      resto = resto % 0.05;

                      let moeda01 = parseInt(resto.toFixed(2) / 0.01);

                      console.log("NOTAS:");
                      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("MOEDAS:");
                      console.log(${moeda1} moeda(s) de R$ 1.00);
                      console.log(${moeda50} moeda(s) de R$ 0.50);
                      console.log(${moeda25} moeda(s) de R$ 0.25);
                      console.log(${moeda10} moeda(s) de R$ 0.10);
                      console.log(${moeda5} moeda(s) de R$ 0.05);
                      console.log(${moeda01} moeda(s) de R$ 0.01);

                      1. "resto" é declarado apenas uma vez e a cada passada do código, vai assumindo um novo valor conforme as notas vão decrescendo de valor e, consequentemente com as moedas. É isso? rs

                        1. Daniel Carvalho @DanielCarvalho
                            2023-10-30 10:08:03.741Z

                            isso aí, Alexandre. A variável "resto" é atualizada a cada passo para representar o valor restante após a distribuição das notas e moedas, garantindo que o valor seja decomposto progressivamente em unidades menores.

                        2. Em resposta agabimoura:

                          Dá pra fazer com laço tbm:

                          var input = require('fs').readFileSync('/dev/stdin', 'utf8');
                          var lines = input.split()
                          
                          var valor = parseFloat(lines);
                          
                          let cedula = [100.00, 50.00, 20.00, 10.00, 5.00, 2.00, 1.00, 0.50, 0.25, 0.10, 0.05, 0.01];
                          let aux = 0;
                          
                          console.log("NOTAS:");
                          
                          for (let i = 0; i < 6; i++) {
                              aux = parseInt(valor / cedula[i]);
                              console.log(`${aux} nota(s) de R$ ${cedula[i].toFixed(2)}`);
                              valor = valor % cedula[i];
                          }
                          console.log("MOEDAS:");
                          
                          for (let j = 6; j < cedula.length; j++) {
                              aux = parseInt(valor / cedula[j]);
                              console.log(`${aux} moeda(s) de R$ ${cedula[j].toFixed(2)}`);
                              valor = valor % cedula[j] + 0.00001;
                          }
                          

                          aí ajusta assim:

                           valor = valor % cedula[j] + 0.00001;
                          
                          1. TTom Silva @TomSilva
                              2023-10-30 13:35:22.458Z

                              fiz varios testes mostrado pelos colegas, e esse acabou de resolver meu problema, muito obrigado.

                            • C
                              Em resposta agabimoura:
                              Camila Vieira @CamilaVieira
                                2023-10-25 01:30:40.099Z

                                Acredito que dá pra usar o método .trunc() também.

                                let moedas01 = Math.trunc(moe5 / 0.01)
                                
                                1. GGabriela Daniel Moura @gabimoura
                                    2023-10-25 14:51:26.839Z

                                    interessante, vou fazer o teste com o trunc() depois. Muito obrigada.

                                  • Em resposta agabimoura:
                                    Lucas Stutz @lucas.stutz
                                      2023-11-02 14:33:03.438Z

                                      Só complementando pessoal, acho que seria legal tentarmos usar os laços de repetição para os exercícios! Fiz metade com o laço de repetição para visualização:

                                      var input = require('fs').readFileSync('/dev/stdin', 'utf8');
                                      var lines = input.split('\n');

                                      let n = parseFloat(lines.shift()).toFixed(2);

                                      const notas = [100, 50, 20, 10, 5, 2];

                                      console.log("NOTAS:")
                                      for (let nota of notas){
                                      let qtdNotas = parseInt(n/nota);
                                      console.log(${qtdNotas} nota(s) de R$ ${nota}.00);
                                      n = n % nota;
                                      }

                                      console.log("MOEDAS:");
                                      console.log(${Math.floor(n/1).toFixed(0)} moeda(s) de R$ 1.00);
                                      n %= 1.00;
                                      console.log(${Math.floor(n/0.50).toFixed(0)} moeda(s) de R$ 0.50);
                                      n %= 0.50;
                                      console.log(${Math.floor(n/0.25).toFixed(0)} moeda(s) de R$ 0.25);
                                      n %= 0.25;
                                      console.log(${Math.floor(n/0.10).toFixed(0)} moeda(s) de R$ 0.10);
                                      n %= 0.10;
                                      console.log(${Math.floor(n/0.05).toFixed(0)} moeda(s) de R$ 0.05);
                                      n %= 0.05;
                                      console.log(${Math.floor(Math.round(n/0.01)).toFixed(0)} moeda(s) de R$ 0.01);
                                      n %= 0.01;

                                      1. Lucas Stutz @lucas.stutz
                                          2023-11-02 14:34:00.057Z

                                          complementando aqui minha resposta, uma observação importante é que quando passamos para aqui o código, vem sem a crase! Se só copiar o código e colar, vai dar erro!