Todos os desafios
Fácil 0 resolvidos 0% de aceitação

Sequência de Collatz

Siga a regra de dividir por dois ou triplicar e somar um até chegar a 1.

Comece com n. Se for par, divida por 2; se for ímpar, multiplique por 3 e some 1. Repita até que o valor seja 1. Inclua tanto o valor inicial quanto o 1 final na sua resposta.

Implemente collatz_sequence(n).

Entrada

n: O inteiro inicial positivo.

Saída

Retorne a sequência completa em ordem.

Restrições

1 ≤ n ≤ 10.000. Entradas nesse intervalo sempre chegam a 1 seguindo essa regra; todos os valores da sequência cabem em um inteiro assinado de 64 bits.

Exemplos

Exemplo 1
Entrada:
n = 6

Saída esperada:
expected = [6, 3, 10, 5, 16, 8, 4, 2, 1]
Entrada:
long long n = 6;

Saída esperada:
std::vector<long long> expected = {6, 3, 10, 5, 16, 8, 4, 2, 1};
Entrada:
long n = 6;

Saída esperada:
long[] expected = new long[] {6, 3, 10, 5, 16, 8, 4, 2, 1};

Explicação

6 é par, então vira 3. Depois, 3 vira 10. Continue aplicando a regra até chegar a 1.

Exemplo 2
Entrada:
n = 1

Saída esperada:
expected = [1]
Entrada:
long long n = 1;

Saída esperada:
std::vector<long long> expected = {1};
Entrada:
long n = 1;

Saída esperada:
long[] expected = new long[] {1};

Explicação

O valor inicial já é 1, então nenhuma transformação é necessária.

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.