六级预科(一)

这篇博客主要探讨了汉诺塔问题,一个经典的递归算法实例。内容包括问题描述,规则说明以及如何将n个圆盘从柱子a通过b移动到柱子c的最少步骤。博客提供了一个整数n作为输入,表示圆盘数量,并要求输出每一步的移动方法。样例输入和输出展示了问题的基本操作和输出格式。
摘要由CSDN通过智能技术生成

问题A   汉诺塔

题目描述

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

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

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

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

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

输入

一个整数n(1≤n≤15),表示盘子的数量。

输出

输出若干行,每行的格式是“步数.源柱->目标柱”(中间没有多余空格)。

样例输入 Copy

3

样例输出 Copy

1.a->c
2.a->b
3.c->b
4.a->c
5.b->a
6.b->c
7.a->c

 【问题分析】

#include<bits/stdc++.h>
using namespace std;
int step;
void hanoi(int n,char a,char b,char c)
{
	if(n==1) cout<<++step<<"."<<a<<"->"<<c<<endl;
	else
	{
		hanoi(n-1,a,c,b);
		cout<<++step<<"."<<a<<"->"<<c<<endl;
		hanoi(n-1,b,a,c);
	}
}
int main()
{
	int n;
	cin>>n;
	hanoi(n,'a','b','c');
 	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值