A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是我大二时学c++时的一道课后习题,突然回想起来,大伙儿看看,练练手

题目:有三座塔 分别是 A B C 在塔A里有一堆盘子,盘子大小不一且大盘在下小盘在上,现在要把塔A里的盘子移动到塔C。在移动的过程中每次只能搬一块,且始终要保证大盘在下小盘在上,移动过程中可利用塔B。
   要求:编程打印出移动的步骤

大伙儿动手吧!(提示:函数的递归调用)

2 个回复

倒序浏览
  1. public class Hanoi {
  2.         public static void hanoi(int n,char A,char B,char C){
  3.                 if(n==1){
  4.                         System.out.println("Move disk "+n+" from "+A+" to "+C);
  5.                 }
  6.                 else{
  7.                         hanoi(n-1,A,C,B);
  8.                         System.out.println("Move disk "+n+" from "+A+" to "+C);
  9.                         hanoi(n-1,B,A,C);
  10.                 }
  11.                
  12.         }
  13.         public static void main(String[] args){
  14.                 int numDisks = 10;
  15.                 hanoi(numDisks,'A','B','C');
  16.         }
  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
用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');
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马