Skip to content
Controlo de FluxoModo de leitura focado
DifícilFase 3

Exercício Difícil — FizzBuzz com Contadores

O clássico exercício de entrevista técnica: combina for, if/else encadeado, operador de resto e continue.

FerramentasVS CodeTerminalNode.js

O FizzBuzz é provavelmente o exercício de lógica mais usado em entrevistas de programação no mundo inteiro — e é uma síntese perfeita de tudo o que viste nesta fase.

Passos a realizar

  1. Cria fizzbuzz.js na pasta fase3.
  2. Usa um for que corra de 1 até 30.
  3. Para cada número: se for divisível por 3 e por 5 ao mesmo tempo, imprime "FizzBuzz". Se for divisível só por 3, imprime "Fizz". Se for divisível só por 5, imprime "Buzz". Caso contrário, imprime o próprio número.
  4. Usa o operador de resto da divisão (%) para testar divisibilidade — um número é divisível por outro se o resto da divisão for 0.
  5. Depois de teres a versão base a funcionar, adiciona um contador separado que conte quantas vezes "Fizz" apareceu sozinho (sem contar os "FizzBuzz"), e imprime esse total no fim, fora do loop.
  6. Usa continue para saltar a impressão do número nos casos em que já imprimiste Fizz, Buzz ou FizzBuzz (evita imprimir duas vezes por engano).

Fluxo de funcionamento

  1. 1i de 1 a 30
  2. 2Divisível por 3 e 5? FizzBuzz
  3. 3Só por 3? Fizz / Só por 5? Buzz
  4. 4Senão, imprime o número

Código de exemplo

fizzbuzz.js
let contadorFizz = 0;

for (let i = 1; i <= 30; i++) {
  if (i % 3 === 0 && i % 5 === 0) {
    console.log("FizzBuzz");
  } else if (i % 3 === 0) {
    console.log("Fizz");
    contadorFizz++;
  } else if (i % 5 === 0) {
    // completa aqui: imprime "Buzz"
  } else {
    console.log(i);
  }
}

console.log("Fizz sozinho apareceu", contadorFizz, "vezes.");
Ponto de partida — completa a lógica dos ramos em falta

Dicas

  • A ordem importa: testa sempre "divisível por 3 e por 5" antes de testar cada um sozinho — senão o caso combinado nunca é alcançado (o mesmo erro do exercício da faixa etária).
  • Se o teu contador de "Fizz sozinho" não bater certo, confirma se estás a incrementá-lo só dentro do ramo certo do if/else e não do FizzBuzz.

Erros comuns

  • Usar dois if separados em vez de if / else if, fazendo com que um número como 15 imprima "Fizz" e depois "Buzz" em vez de "FizzBuzz".
  • Comparar com == 0 usando um número de divisão errado (dividir por 5 quando queria testar por 3, por exemplo) — um erro fácil de cometer a copiar e colar condições.

As minhas dúvidas

Voltar à vista da fase