Início Inscrições Informações Gerais Regulamento Pratique Contato Mapa do Conteúdo

 Você está visitando: Início > Olimpíada Brasileira de Informática > Pratique > Modalidade Programação >
                                            > Nível 2

Torres de Hanói

As Torres de Hanoi são um quebra-cabeca muito antigo e conhecido. Ele é constituído de um conjunto de N discos de tamanhos diferentes e três pinos verticais, nos quais os discos podem ser encaixados.

Cada pino pode conter uma pilha com qualquer número de discos, desde que cada disco não seja colocado acima de outro disco de menor tamanho. A configuracão inicial consiste de todos os discos no pino 1. O objetivo é mover todos os discos para um dos outros discos, sempre obedecendo à restricão de não colocar um disco sobre outro menor.

Um algoritmo para resolver este problema é o seguinte.

procedimento Hanoi(N, Orig, Dest, Temp)
  se N = 1 então
    mover o menor disco do pino Orig para o pino Dest;
  senão
    Hanoi(N-1, Orig, Temp, Dest); 
    mover o N-ésimo menor disco do pino Orig para o pino Dest;
    Hanoi(N-1, Temp, Dest, Orig);
  fim-se
fim

Tarefa

Sua tarefa é escrever um programa que determine quantos movimentos de trocar um disco de um pino para outro serão executados pelo algoritmo acima para resolver o quebra-cabeca.

Entrada

A entrada possui vários conjuntos de teste. Cada conjunto de teste é composto por uma única linha, que contém um único número inteiro N (0 ≤ N ≤ 30), indicando o número de discos. O final da entrada é indicado por N = 0.

Exemplo de Entrada

1
2
0

Saída

Para cada conjunto de teste, o seu programa deve escrever três linhas na saída. A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n é numerado seqüencialmente a partir de 1. A segunda linha deve conter o número de movimentos que são executados pelo algoritmo dado para resolver o problema das Torres de Hanoi com N discos. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.

Exemplo de Saída

Teste 1
1

Teste 2
3

(esta saída corresponde ao exemplo de entrada acima)

Restricões

0 ≤ N ≤ 30 (N = 0 apenas para indicar o final da entrada)

Apoio: Unicamp Patrocínio: Fundação Carlos Chagas Promoção: SBC