这是题目
这是我测试和提交的过程
我觉得自己写的没有什么错误,但是检测结果老是错了 大家看一下哪一步出了问题
你的代码贴出来啊,我写了一个代码,你用我这个试试吧:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int idb[20]={0}, idc[20]={0}, idd[20]={0}; //每个柱子上最上面的盘子的编号
int nmbb = 20, nmbc = 0, nmbd = 0; //每个柱子上的盘子数量
char g_b, g_c, g_d; //三个柱子的编号
void move(char x, char y)
{
int id;
if (x == g_b)
{
id = idb[nmbb - 1];
nmbb--;//盘子数量-1
printf("%c->%d->%c\n", x, id, y);
//记录盘子的编号
if (y == g_c)
idc[nmbc++] = id;
else
idd[nmbd++] = id;
}
else if (x == g_c)
{
id = idc[nmbc - 1];
nmbc--;
printf("%c->%d->%c\n", x, id, y);
//记录盘子的编号
if (y == g_b)
idb[nmbb++] = id;
else
idd[nmbd++] = id;
}
else
{
id = idd[nmbd - 1];
nmbd--;
printf("%c->%d->%c\n", x, id, y);
//记录盘子的编号
if (y == g_b)
idb[nmbb++] = id;
else
idc[nmbc++] = id;
}
}
void hanio(int n, char b, char c, char d)
{
if (1 == n)
{
move(b, d);
}
else
{
hanio(n - 1, b, d, c);
move(b, d);
hanio(n - 1, c, b, d);
}
}
int main()
{
int n = 0;
int i;
//char b, c, d;
scanf("%d %c %c %c", &n, &g_b, &g_c, &g_d);
//初始盘子编号
nmbb = n;
for (i = 0; i < n; i++)
idb[i] = n-i;
hanio(n, g_b, g_d, g_c); //从最左边柱子移动到中间的柱子上
return 0;
}