本文主要是介绍NEFU564 汉诺塔【递归】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:
http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=564
题目大意:
庙里有3个柱子,柱A、柱B、柱C。柱A有64个盘子,从上往下越来越大。庙里的老和尚想把这64个盘子
全部移动到柱C上。移动的时候始终只能小盘子压住大盘子,大盘子不能在小盘子上边。每次只能移动一
个。问:将柱A上面钱N个盘子从A搬到柱C的移动次数最少的搬动方法是什么
思路:
吧N个盘子从柱A移到柱C需要三个步骤:
1)把住A上N-1个盘子借助柱C移到柱B
2)把柱A上第N个盘子移动到柱C
3)把柱B上N-1个盘子借助柱A移动到柱C
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;void move(int n,char a,char b)
{printf("number..%d..form..%c..to..%c\n",n,a,b);
}int Hanoi(int n,char a,char b,char c)
{if(n == 1)move(1,a,c);else{Hanoi(n-1,a,c,b);move(n,a,c);Hanoi(n-1,b,a,c);}return 0;
}int main()
{int N;while(~scanf("%d",&N)){Hanoi(N,'A','B','C');}return 0;
}
这篇关于NEFU564 汉诺塔【递归】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!