黑马程序员技术交流社区
标题:
给大家一个练手题目:用java 解决汉诺塔问题
[打印本页]
作者:
刘永昌
时间:
2011-11-1 17:06
标题:
给大家一个练手题目:用java 解决汉诺塔问题
这是我大二时学c++时的一道课后习题,突然回想起来,大伙儿看看,练练手
题目:有三座塔 分别是 A B C 在塔A里有一堆盘子,盘子大小不一且大盘在下小盘在上,现在要把塔A里的盘子移动到塔C。在移动的过程中每次只能搬一块,且始终要保证大盘在下小盘在上,移动过程中可利用塔B。
要求:编程打印出移动的步骤
大伙儿动手吧!(提示:函数的递归调用)
作者:
张奇云
时间:
2011-11-1 18:54
public class Hanoi {
public static void hanoi(int n,char A,char B,char C){
if(n==1){
System.out.println("Move disk "+n+" from "+A+" to "+C);
}
else{
hanoi(n-1,A,C,B);
System.out.println("Move disk "+n+" from "+A+" to "+C);
hanoi(n-1,B,A,C);
}
}
public static void main(String[] args){
int numDisks = 10;
hanoi(numDisks,'A','B','C');
}
}
复制代码
作者:
刘俊佳
时间:
2012-7-14 09:12
用C实现的代码如下:
void Move(char sour, char dest){
printf("\nMove the top plate of %c to %c",sour, dest);
}
Hanoi(int n, char A, char B, char C)
{
if(n==1) /*盘子数量为1,打印结果后,不再继续进行递归*/
Move(A,C);
else/*盘子数量大于1,继续进行递归过程*/
{
Hanoi(n-1,chA,chC,chB);
Movech(A,chC);
Hanoi(n-1,chB,chA,chC);
}
}
main()
{
int n;
printf("\n:请输入盘子的个数: ");
scanf("%d",&n);
printf("\n移动 %d 盘子从A到C:",n);
Hanoi(n,'A','B','C');
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2