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

Dobrando Grãos em um Tabuleiro de Xadrez

Calcule a quantidade de grãos em uma casa e o total em todas as 64 casas.

O que você vai aprender

  • Calcular duplicações com potências de dois
  • Somar uma série geométrica
  • Trabalhar com valores perto do limite de 64 bits

Problema

Ver original (inglês)

A casa 1 contém um grão. Cada casa seguinte contém o dobro de grãos da casa anterior. Retorne tanto a quantidade na casa solicitada quanto o total nas casas de 1 a 64. Escreva cada quantidade como texto decimal, pois o total do tabuleiro é grande demais para um inteiro assinado de 64 bits.

Implemente chessboard_grains(square).

Entrada

square: A casa solicitada, numerada a partir de 1.

Saída

Retorne duas strings decimais: [quantidade na casa solicitada, total em todas as 64 casas].

Restrições

1 ≤ square ≤ 64. As strings de saída devem conter apenas dígitos decimais, sem vírgulas, espaços ou zeros à esquerda.

Exemplos

Exemplo 1
Entrada:
square = 6

Saída esperada:
expected = ["32", "18446744073709551615"]
Entrada:
long long square = 6;

Saída esperada:
std::vector<std::string> expected = {"32", "18446744073709551615"};
Entrada:
long square = 6;

Saída esperada:
string[] expected = new string[] {"32", "18446744073709551615"};

Explicação

As seis primeiras quantidades são 1, 2, 4, 8, 16, 32. O total do tabuleiro é 1 + 2 + … + 2⁶³ = 2⁶⁴ − 1.

Exemplo 2
Entrada:
square = 1

Saída esperada:
expected = ["1", "18446744073709551615"]
Entrada:
long long square = 1;

Saída esperada:
std::vector<std::string> expected = {"1", "18446744073709551615"};
Entrada:
long square = 1;

Saída esperada:
string[] expected = new string[] {"1", "18446744073709551615"};

Explicação

A primeira casa contém 1 grão. A segunda saída sempre se refere a todas as 64 casas, não apenas ao prefixo solicitado.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Cada casa dobra a anterior, então a quantidade pedida depende só da posição.

Dica 2

O total nas 64 casas forma uma progressão geométrica e cresce muito além dos limites de inteiros normais.

Dica 3

Retorne os dois valores como texto decimal puro, e lembre que a primeira casa vale um, não zero.

Complexidade esperada

tempo O(1), espaço extra O(1)

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.