No internet connection
  1. Home
  2. Exercícios do Beecrowd

1151 - Fibonacci Fácil - Presentation Error (100%)

Por Thiago Nebuloni @thiagonebuloni
    2023-03-15 10:45:32.274Z

    E lá vamos nós outra vez.

    Faz uns dias que estou travado nesse presentation error.

    A resposta do beecrowd é genérica, não mostra o output.

    Meu código:

    var input = require('fs').readFileSync('/dev/stdin', 'utf8');
    var lines = input.split('\n');
    
    let a = parseInt(lines);
    let penultimo = 0;
    let ultimo = 1;
    
    if (a > 1) {
        let answer = [penultimo, ultimo];
    
        for (let num = 1; num < a - 1; num++) {
            let temp = ultimo;
            ultimo += penultimo;
            penultimo = temp;
            answer.push(ultimo);        
        }
        
        let output = "";
        for (let num = 0; num < answer.length; num++) {
            output += answer[num] + " ";
        }
        console.log(output);
        console.log();
    
    } else if (a == 1) console.log(0);
    

    Esperado pelo beecrowd:

    Minha saída:

    Link do exercício:
    https://www.beecrowd.com.br/judge/pt/problems/view/1151

    Se alguém descobrir e puder me apontar o erro na apresentção ficarei extremamente grato!

    • 7 respostas
    1. André Filipe @andresantos
        2023-03-15 11:40:07.649Z

        Observe:

        I) Já que a entrada é apenas um número inteiro, não existirá o \n.
        II) Se você substituir o espaço em branco que há entre os números do output por um *, verá que a saída para a entrada 5 será 0*1*1*2*3*. É necessário remover o último espaço em branco.
        III) O console.log() escreve uma linha e a questão não pediu isso.

        1. TThiago Nebuloni @thiagonebuloni
            2023-03-15 22:08:31.713Z

            Boa André!
            Hoje no almoço pensei nisso, nos espaços entre os números. Vou testar trocar o espaço por um . para ver.
            Valeu!

          • Em resposta athiagonebuloni:
            Isabela Schadt @IsabelaSchadt
              2023-03-16 07:01:33.821Z

              Estou presa nessa questão também Thiago, eu fiz totalmente diferente mas também esta dando erro. Coloquei o seu pra rodar e percebi uma coisa que percebi no meu, mas não sei como arrumar. Se testarmos a entrada com 8 a saida vai ser 0 1 1 2 3 5 8 13, quando na verdade deveria ser 0 1 1 2 3 5 .
              Ainda não consegui concertar a lógica disso no meu, mas talvez seja essa a chave da nossa correção.

              1. TThiago Nebuloni @thiagonebuloni
                  2023-03-16 09:41:55.026Z

                  Se testarmos a entrada com 8 a saida vai ser 0 1 1 2 3 5 8 13, quando na verdade deveria ser 0 1 1 2 3 5 .

                  Mas é exatamente isso que o exercício pede:

                  Escreva um algoritmo que leia um inteiro N (N < 46) e mostre os N primeiros números dessa série.

                  No exemplo ele coloca 5 e a saída são os 5 primeiros números da sequência de Fibonacci:

                  Se você entrar com 8 ele deve imprimir os 8 primeiros números.

                  Pode dizer qual é o erro que está aparecendo pra você? Se fosse erro de lógica apareceria Wrong Answer (X%). Se estiver aparecendo Presentation Error como no meu, então deve ser um problema de espaços.

                  A correção para o meu problema foi iniciar a variável de saída com 0, porque esse seria o primeiro número em quase todos os casos, a menos que o número de entrada fosse também 0, assim não mostraria nenhum dos números.

                   let output = "0";
                  

                  Também precisei alterar o início da iteração para 1, como o 0 já está na variável de saída, podemos começar pela segunda posição, o índice 1.
                  Assim ele fica "0 1 2 ..."

                  Antes estava iniciando com um espaço antes do 0: " 0 1 2 ..."

                  for (let num = 1; num < answer.length; num++) {
                          output += answer[num] + " ";
                      }
                  
                  1. Isabela Schadt @IsabelaSchadt
                      2023-03-16 20:03:26.169Z

                      Ahhhh, é mesmo kkkkk. Eu tinha entendido que a soma dos dois últimos números da sequencia seria o numero de entrada, mas vi de novo e diz "primeiros N números dessa sequência.", em relação a soma é só para explicar a sequencia né. Agora a vida faz mais sentido hahahah, vou tentar mexer no meu com as dicas de vocês e ver se agora eu consigo.
                      Obrigada André e Thiago!!

                    • Em resposta aIsabelaSchadt:
                      Isabela Schadt @IsabelaSchadt
                        2023-03-16 07:04:18.742Z

                        Inclusive, se descobrir posta aqui por que estou quase desistindo dessa bendita questão kkkkk

                        1. André Filipe @andresantos
                            2023-03-16 14:19:33.335Z

                            As correções que sugeri para a resposta do Thiago são:

                            I) Substituir

                            var lines = input.split('\n');
                            let a = parseInt(lines);
                            

                            por

                            const a = parseInt(input);
                            

                            II) Substituir

                            console.log(output);
                            

                            por

                            console.log(output.trim());
                            

                            III) Remover

                            console.log();