Enviado em 05/09/2016 - 12:34h
Boa tarde, apareceu um trabalhinho na facul pra montar um código que resolva o jogo torre de hanói mostrando os passos e com a mínima quantidade de movimentos possíveis. Após uma pesquisa eu vi que é possível fazer com recursividade, porém, não entrei nesse tema ainda, então quis fazer de uma outra forma. Consegui fazer da forma abaixo, onde há uma lógica caso número de discos seja par ou ímpar, aceitos sugestões para otimizar o código caso possível e críticas construtivas, obrigado.
#include<stdio.h>
#include<math.h>
int main()
{
int n, m, d;
//recebe a quantidade de discos
printf("Digite a quantidade de discos\n");
scanf("%d",&d);
// n é a quantidade de movimentos mínimos necessários
n=pow(2,d)-1;
//inprime a quantidade de movimentos
printf("Para essa quantidade de discos sao necessários %d movimentos.\n\n", n);
printf("\n\nMOVIMENTO PERMITIDO: Um disco maior nao pode ficar em cima de um menor\n\n\nPressione enter para prosseguis com os passos\n");
system("pause>>NULL");
//contador de passos
m=1;
//verifica se quantidade de discos é par
if((d % 2) == 0)
{
//quando número de discos for par: repita até a quantidade de movimentos (m) for igual que a quantidade de movimento mínimos necessários(n)
do{
if (m<=n)printf("%d: Se possível movimente o disco da torre A para B, senao, de B para A\n",m);
m=m+1;
system("pause>>NULL");
if (m<=n)printf("%d: Se possível movimente o disco da torre A para C, senao, de C para A\n",m);
m=m+1;
system("pause>>NULL");
if (m<=n)printf("%d: Se possível movimente o disco da torre B para C, senao, de C para B\n",m);
m=m+1;
system("pause>>NULL");
}while (m<=n);
}
else
{
//quando número de discos for ímpar: repita até a quantidade de movimentos (m) for igual que a quantidade de movimento mínimos necessários(n)
do{
if (m<=n)printf("%d: Se possível movimente o disco da torre A para C, senao, de C para A\n",m);
m=m+1;
system("pause>>NULL");
if (m<=n)printf("%d: Se possível movimente o disco da torre A para B, senao, de B para A\n",m);
m=m+1;
system("pause>>NULL");
if (m<=n)printf("%d: Se possível movimente o disco da torre C para B, senao, de B para C\n",m);
m=m+1;
system("pause>>NULL");
}while(m<=n);
}
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Preciso resolver um erro de DPKG (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta