汉诺塔
【问题描述】
有n个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱上无盘子),但绝不允许发生柱上出现大盘子在上,小盘子在下的情况,现要求设计将A柱子上n个盘子搬移到C柱去的方法。
【样例输入】
3
【样例输出】
1:x ----> z
2:x ----> y
3:z ----> y
4:x ----> z
5:y ----> x
6:y ----> z
7:x ----> z
7
【过程分析】
#include<iostream> using namespace std; int cnt=0; void hnt(int n, char x, char z, char y){ if(n==0) return; // 假设n=2,则: hnt(n-1, x, y, z); // x->y,所以z过度柱。 cnt++; cout<<cnt<<" "<<x<<" ----> "<<z<<endl; // x->z 直接输出,不需要调用。 hnt(n-1,y, z, x); // y->z,所以x过度柱。 } int main(){ int n; cin>>n; hnt(n,'x', 'z', 'y'); // y是过度柱。 cout<<cnt; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现