Buscar

O Desafio – A Torre de Hanói!

O Desafio – A Torre de Hanói!

A Lenda: o problema das torres de Hanói foi proposto pelo matemático francês Edouard Lucas, em 1883. Lucas elaborou para seu “invento” uma lenda curiosa sobre uma torre muito grande. A “torre de Brama”, que foi criada no “início dos tempos”, com três hastes contendo 64 discos concêntricos (mesmo centro). O “criador” do universo também criou uma comunidade de monges cuja única atividade seria mover os discos da haste original (“A”) para uma de destino (“C”). O “criador” estabeleceu que o mundo acabaria quando os monges terminassem sua tarefa. Porém, os monges deveriam respeitar as três regras para a sua execução.

É interessante observar que o número mínimo de "movimentos" para conseguir transferir todos os discos da primeira estaca à terceira é 2n-1, sendo n o número de discos.


Logo: Para solucionar um Hanói de 3 discos, são necessários 23 -1 movimentos = 7 movimentos.

Para solucionar um Hanói de 7 discos, são necessários 127 movimentos.

Para solucionar um Hanói de 15 discos, são necessários 32.767 movimentos.

Para solucionar um Hanói de 64 discos, como diz a lenda, são necessários 18.446.744.073.709.551.615 movimentos.

Usando um pouco de lógica e a ferramenta Matlab, você precisa escrever um algoritmo que solucione esse desfio!

Acompanhe, na imagem a seguir, as orientações.


💡 3 Respostas

User badge image

Gabriela

Padrão de resposta esperado


O algoritmo poderia ser descrito da seguinte forma:


Em um script separado, salve-o com o nome de torre.m


function torre(n, init, temp, fin)


 if n == 1

  disp([init ' to ' fin])


 else

  torre(n-1,init, fin,temp);

  torre(1,init, temp, fin);

  torre(n-1,temp, init,fin);

 end


Em outro arquivo (script), você pode entrar com o seguinte comando, chamando a função:


  clc, clear;

  num = input('Torre de Hanoi: Informe o numero de discos:\n');

  fprintf('\n\n');

  torre(num,'A','B','C');

  fprintf('\n\n');


Esse comando retorna os seguintes valores de resultados:


        A to C

        A to B

        C to B

        A to C

        B to A

        B to C

        A to C

1
Dislike0
User badge image

Sunly Macelin

Isla



3



Destrave tudo

ASSINE AGORA

TheGabiie


respondido

O Desafio – A Torre de Hanói!

A Lenda: o problema das torres de Hanói foi proposto pelo matemático francês Edouard Lucas, em 1883. Lucas elaborou para seu “invento” uma lenda curiosa sobre uma torre muito grande. A “torre de Brama”, que foi criada no “início dos tempos”, com três hastes contendo 64 discos concêntricos (mesmo centro). O “criador” do universo também criou uma comunidade de monges cuja única atividade seria mover os discos da haste original (“A”) para uma de destino (“C”). O “criador” estabeleceu que o mundo acabaria quando os monges terminassem sua tarefa. Porém, os monges deveriam respeitar as três regras para a sua execução.

É interessante observar que o número mínimo de "movimentos" para conseguir transferir todos os discos da primeira estaca à terceira é 2n-1, sendo n o número de discos.


Logo: Para solucionar um Hanói de 3 discos, são necessários 23 -1 movimentos = 7 movimentos.

Para solucionar um Hanói de 7 discos, são necessários 127 movimentos.

Para solucionar um Hanói de 15 discos, são necessários 32.767 movimentos.

Para solucionar um Hanói de 64 discos, como diz a lenda, são necessários 18.446.744.073.709.551.615 movimentos.

Usando um pouco de lógica e a ferramenta Matlab, você precisa escrever um algoritmo que solucione esse desfio!

Acompanhe, na imagem a seguir, as orientações.


1

VER A RESPOSTA


Anúncio























Resposta

3 pessoas acharam útil


gabrielacristinasrod

  • Aluno
  • 1 resposta
  • 3 pessoas receberam ajuda



Resposta:

Padrão de resposta esperado


O algoritmo poderia ser descrito da seguinte forma:


Em um script separado, salve-o com o nome de torre.m


function torre(n, init, temp, fin)


 if n == 1

  disp([init ' to ' fin])


 else

  torre(n-1,init, fin,temp);

  torre(1,init, temp, fin);

  torre(n-1,temp, init,fin);

 end


Em outro arquivo (script), você pode entrar com o seguinte comando, chamando a função:


  clc, clear;

  num = input('Torre de Hanoi: Informe o numero de discos:\n');

  fprintf('\n\n');

  torre(num,'A','B','C');

  fprintf('\n\n');


Esse comando retorna os seguintes valores de resultados:


        A to C

        A to B

        C to B

        A to C

        B to A

        B to C

        A to C

0
Dislike0
User badge image

Sunly Macelin

Padrão de resposta esperado


O algoritmo poderia ser descrito da seguinte forma:


Em um script separado, salve-o com o nome de torre.m


function torre(n, init, temp, fin)


 if n == 1

  disp([init ' to ' fin])


 else

  torre(n-1,init, fin,temp);

  torre(1,init, temp, fin);

  torre(n-1,temp, init,fin);

 end


Em outro arquivo (script), você pode entrar com o seguinte comando, chamando a função:


  clc, clear;

  num = input('Torre de Hanoi: Informe o numero de discos:\n');

  fprintf('\n\n');

  torre(num,'A','B','C');

  fprintf('\n\n');


Esse comando retorna os seguintes valores de resultados:


        A to C

        A to B

        C to B

        A to C

        B to A

        B to C

        A to C

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais