首页 > 试题广场 >

汉诺塔

[问答题]

汉诺塔


内容:

设有n个大小不等的中空圆盘,按照从小到大的顺序迭套在立柱A上(最上面是1号盘子),另有两根立柱B和C。现要求把全部圆盘从A柱(源柱)移到C柱(目标柱),移动过程中可借助B柱(中间柱)。移动时有如下的要求:
一次只许移动一个盘;
不允许把大盘放在小盘上边;
可使用任意一根立柱暂存圆盘

输入说明:

一行一个整数n<=10

输出说明:

若干行,例如1:A->C,代表1号盘子由A移动到C。(->箭头有-和>表示)

输入样例:

3

输出样例:

1:A->C 
2:A->B 
1:C->B 
3:A->C 
1:B->A 
2:B->C 
1:A->C
#include<iostream>  
using namespace std;  
  
void f(int n,char a,char b,char c)  
{  
    if(n==1)  
    cout<<"1:"<<a<<"->"<<c<<endl;  
    else  
    {f(n-1,a,c,b);  
    cout<<n<<":"<<a<<"->"<<c<<endl;  
    f(n-1,b,a,c);}  
}  
  
int main()  
{  
    int n;char a='A',b='B',c='C';  
    cin>>n;  
    f(n,a,b,c);  
    return 0;  
}  

static void hanoi(int n, String x, String y, String z) {
	if (n == 1) {
		System.out.println(x + "->" + z);
	}
	else {
		hanoi(n - 1, x, z, y);
		System.out.println(x + "->" + z);
		hanoi(n - 1, y, x, z);
	}
}
发表于 2021-05-26 20:00:50 回复(0)
#include<iostream>
using namespace std;
int n,i=0;
void move(int n,char a,char b,char c)
{
    if(n==1)
        cout<<++i<<": "<<a<<"->"<<c<<endl;
    else
    {
        move(n-1,a,c,b);
        cout<<++i<<": "<<a<<"->"<<c<<endl;
        move(n-1,b,a,c);
    }
}
int main()
{
    cin>>n;
    move(n,'A','B','C');
    return 0;
}
发表于 2019-05-19 21:20:01 回复(0)
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int num = sc.nextInt();
        hnt(num,"A","B","C");
        sc.close();
    }
    
    public static void hnt(int n,String A,String B,String C) {
        if (n==1) {
            System.out.println(A+"->"+C);
        } else {
            hnt(n-1, A, C, B);
            System.out.println(A+"->"+C);
            hnt(n-1, B, A, C);
        }
    }

}



发表于 2019-05-09 17:38:29 回复(0)