编程题:汉诺塔(Lanqiao)
汉诺塔是一个古老的数学问题:
有三根杆子 A,B,C。A 杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:
每次只能移动一个圆盘
大盘不能叠在小盘上面
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。问:如何移?最少要移动多少次?
### 输入格式:
一行,包含 2 个正整数,一个是 N,表示要移动的盘子数;一个是 M,表示最少移动步数的第 MM 步。
### 输出格式:
共 2 行。
第一行输出格式为:#No: a->b,表示第 M 步骤具体移动方法,其中 No 表示第 M 步移动的盘子的编号(N个盘子从上到下依次编号为 1 到 n),表示第M步是将 No 号盘子从 a 杆移动到 b 杆(a和 b 的取值均为 {A、B、C})。
第 2 行输出一个整数,表示最少移动步数。
### 输入样例:
在这里给出一组输入。例如:
in
3 2
### 输出样例:
在这里给出相应的输出。例如:
out
#2: A->B
7
答案:若无答案欢迎评论
有三根杆子 A,B,C。A 杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:
每次只能移动一个圆盘
大盘不能叠在小盘上面
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。问:如何移?最少要移动多少次?
### 输入格式:
一行,包含 2 个正整数,一个是 N,表示要移动的盘子数;一个是 M,表示最少移动步数的第 MM 步。
### 输出格式:
共 2 行。
第一行输出格式为:#No: a->b,表示第 M 步骤具体移动方法,其中 No 表示第 M 步移动的盘子的编号(N个盘子从上到下依次编号为 1 到 n),表示第M步是将 No 号盘子从 a 杆移动到 b 杆(a和 b 的取值均为 {A、B、C})。
第 2 行输出一个整数,表示最少移动步数。
### 输入样例:
在这里给出一组输入。例如:
in
3 2
### 输出样例:
在这里给出相应的输出。例如:
out
#2: A->B
7
答案:若无答案欢迎评论