私题提问,大佬求助!!
  • 板块题目总版
  • 楼主freebrave
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/2 14:00
  • 上次更新2023/12/2 15:44:42
查看原帖
私题提问,大佬求助!!
1106440
freebrave楼主2023/12/2 14:00

汉诺塔游戏

题目背景

汉诺塔由编号1到n且大小不同的圆盘和3柱子a,b,c组成,编号越小,盘子越小。开始时,这n个圆盘由大到小依次套在a柱上。要求把a柱上n个圆盘按下述规则移到c柱上。

题目描述

(1)一次只能移一个圆盘,它必须位于某个柱子的顶部。

(2)圆盘只能在三个柱子上存放。

(3)任何时候不允许大盘压小盘。

将这n个盘子用最少移动次数从a柱移动到c柱上,输出每一步的移动方法。

输入格式

只有一行,一个整数n(1<=n<=20),表示盘子的数量。

输出格式

输出若干行,每行的格式是“步数.Move盘子编号from源柱to目标柱”。

样例 #1

样例输入 #1

3

样例输出 #1

1. Move 1 from a to c
2. Move 2 from a to b
3. Move 1 from c to b
4. Move 3 from a to c
5. Move 1 from b to a
6. Move 2 from b to c
7. Move 1 from a to c
我的代码:
```c
#include<iostream>
using namespace std;
int step;
void hanoi(int n,char a,char b,char c)
{
	if(n==1)cout<<++step<<" .Move "<<n<<" from "<<a<<" to "<<c<<endl;
	else
	{
		hanoi(n-1,a,c,b);
		cout<<++step<<" .Move "<<n<<" from "<<a<<" to "<<c<<endl;
		hanoi(n-1,b,a,c);
	}
}
int main()
{
	int n;
	cin>>n;
	hanoi(n,'a','b','c');
	return 0;
}
2023/12/2 14:00
加载中...