# GÓC SÁNG TẠO > Khu vực lập trình > C/C++ >  viết chương trình C về bài toán tháp hà nội

## tuboi

mình đang làm bài tập lớn đó là bài tập về tháp hà nội ai biết chỉ giúp mình với:bawling:

----------


## lebichvan888

* tháp hà nội là sao,yêu cầu cụ thể đề bài ntn vậy bạn ?*

----------


## cuongcung

```
#include <stdio.h>
#include <conio.h>

void hanoi(int, char, char, char);

void main()
{
   int n;
   char c;
   clrscr();
   do
   {
      printf("

Nhap so dia: ");
      scanf("%d", &n);
      printf("Cac buoc chuyen dia:");
      hanoi(n, 'A', 'C', 'B');
      printf("

Tiep tuc khong? (c/k): ");
      c = getche();
   } while(c == 'C' || c == 'c');
}

void hanoi(int n, char cotA, char cotC, char cotB)
{
   if(n == 1)
   {
      printf("
%s%c%s%c", "   chuyen dia 1 tu cot ", cotA, " den cot ", cotC);
      return;
   }
   hanoi(n-1, cotA, cotB, cotC);
   printf("
%s%d%s%c%s%c", "   chuyen dia ", n, " tu cot ", cotA, " den cot ", cotC);
   hanoi(n-1, cotB, cotC, cotA);
}
```

*Bạn thử chạy coi có đúng bài này ko????*​

----------


## clean190914

*bạn ơi tháp hà nội của bạn cụ thể ntn, mình chỉ làm được 2 loại này, bạn cho ý kiến nhé :
Tháp Hà Nội dùng 3 đĩa:
**#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>

#define A 0
#define B 1
#define C 2

void hanoi(int from, int to, int dia)
{
int trunggian;
if (dia == 1)
printf("
Chuyen 1 dia tu coc %c sang coc %c", 'A'+from, 'A'+to);
else
{
if ((from == A && to == C) || (from == C && to == A))
trunggian = B;
else if ((from == A && to == B) || (from == B && to == A))
trunggian = C;
else if ((from == C && to == B) || (from == B && to == C))
trunggian = A;
hanoi(from, trunggian, dia-1);
hanoi(from, to, 1);
hanoi(trunggian, to, dia-1);
}
}

void main()
{
int n;

printf("
Cho biet so dia ( 3 -> 6 ): ");
do {
scanf("%d", &n);
} while (n < 3 || n > 6);
hanoi(A, C, n);
getch();
}**
còn đây là tháp dùng 4 đĩa:
**#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>

#define A 0
#define B 1
#define C 2
#define D 3

void hanoi(int from, int to, int dia)
{
int tg1, tg2, dia2;
if (dia <= 1)
printf("
Chuyen 1 dia tu coc %c sang coc %c", 'A'+from, 'A'+to);
else
{
if ((from == A && to == D) || (from == D && to == A))
{
tg1 = B;
tg2 = C;
}
else if ((from == A && to == B) || (from == B && to == A))
{
tg1 = C;
tg2 = D;
}
else if ((from == A && to == C) || (from == C && to == A))
{
tg1 = B;
tg2 = D;
}
else if ((from == B && to == C) || (from == C && to == B))
{
tg1 = A;
tg2 = D;
}
else if ((from == B && to == D) || (from == D && to == B))
{
tg1 = A;
tg2 = C;
}
else if ((from == C && to == D) || (from == D && to == C))
{
tg1 = A;
tg2 = B;
}
dia2 = dia / 2;
if (dia % 2 == 1)
{
hanoi(from, tg1, dia2);
hanoi(from, tg2, dia2);
hanoi(from, to, 1);
hanoi(tg2, to, dia2);
hanoi(tg1, to, dia2);
}
else
{
hanoi(from, tg1, dia2);
if (dia2 > 1)
{
hanoi(from, tg2, dia2-1);
hanoi(from, to, 1);
hanoi(tg2, to, dia2-1);
}
else
hanoi(from, to, 1);
hanoi(tg1, to, dia2);
}
}
}

void main()
{
int n;

printf("
Cho biet so dia ( 3 -> 6 ): ");
do {
scanf("%d", &n);
} while (n < 3 || n > 6);
hanoi(A, D, n);
getch();
}*

----------

