九敏!求大佬指点!!!

题目描述:

著名的汉诺塔问题:

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆环,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至B杆:

1.每次只能移动一个圆盘;

2.大盘不能叠在小盘上面。

解决这类问题有以下方案:

现在假设我们要将 t 个盘子从柱子 x 放到柱子 y,则我们可以先想办法把上面的 t-1个盘子放到另一个柱子上,然后将最大的盘子放到y上,最后将那t-1个盘子放到第 y 个柱子上。那么移动 t-1 个盘子就变成了一个子问题。

给定 n ,求问:按照上述策略,依次输出进行了那些操作。

输入格式:

一个正整数 n

输出格式:

若干行,表示操作。

格式见样例。

样例输入1:

2

样例输出1:

A->C A->B C->B

约定:

1<=n<=10

样例都没过 :sob: :sob: :sob:

代码:

#include <bits/stdc++.h>
using namespace std;
int n;
void f(int, char, char, char);
int main()
{
	scanf("%d", &n);
	dfs(n, 'A', 'B', 'C');
	return 0;
}
void f(int n, char x, char y, char z)
{
	if (n == 0)
	{
		return;
	} 
	f(n - 1, x, z, y);
	printf("%c->%c\n", x, z);
	f(n - 1, y, x, z);
}
3 个赞

在线等,急急急!!!

3 个赞

求助!

1 个赞

啊啊啊,怎么没人回复?

1 个赞

呃……

1 个赞

你的代码:
#include <bits/stdc++.h>
using namespace std;
int n;
void f(int, char, char, char);
int main()
{
scanf(“%d”, &n);
dfs(n, ‘A’, ‘B’, ‘C’);
return 0;
}
void f(int n, char x, char y, char z)
{
if (n == 0)
{
return;
}
f(n - 1, x, z, y);
printf(“%c->%c\n”, x, z);
f(n - 1, y, x, z);//*
}

问题在*行,返回时是z,y,x

1 个赞
#include <bits/stdc++.h>
using namespace std;
int n;
void f(int, char, char, char);
int main()
{
	scanf("%d", &n);
	f(n, 'A', 'B', 'C');
	return 0;
}
void f(int n, char x, char y, char z)
{
	if (n == 0)
	{
		return;
	} 
	f(n - 1, x, z, y);
	printf("%c->%c\n", x, z);
	f(n - 1, z, y, x);
}

@谢晨泽 还是WA0。

1 个赞

#include <bits/stdc++.h>
using namespace std;
int n;
void f(int, char, char, char);
int main()
{
scanf(“%d”, &n);
f(n, ‘A’, ‘C’, ‘B’);
return 0;
}
void f(int n, char x, char y, char z)
{
if (n == 0)
{
return;
}
f(n - 1, x, z, y);
printf(“%c->%c\n”, x, z);
f(n - 1, y, x, z);
}
因当是这样,
其中的一个粗体字是要将‘B’和‘C’的位置互换
第二个是将z,y,x换成y,x,z

2 个赞

感谢大佬,解决方案给你了!

2 个赞

谢谢

2 个赞