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);
}
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
A area de trabalho ficou preta (14)
Falta pacotes de suporte ao sistema de arquivos (Gerenciador de discos... (4)
xubuntu sem sons de eventos (4)