如果定义解决汉诺塔问题的函数:hanoi::Int-Int-Int-Int-[(Int,Int,Int)] hanoinstartmidend=...hanoi n start mid end 表示将n(第一个参数)个盘子从start(第二个参数)移到end(第四个参数)上,mid(第三个参数)是辅助柱子,那么在定义中如何表示将n-1个盘子从mid移到end上,start作为辅助柱子?
A: hanoi n-1 mid end start
B: hanoi (n-1) mid start end
C: hanoi (n-1) start end mid
D: hanoi (n-1) mid end start
A: hanoi n-1 mid end start
B: hanoi (n-1) mid start end
C: hanoi (n-1) start end mid
D: hanoi (n-1) mid end start
举一反三
- 对于汉诺塔问题,假设盘子从上到下编号1,2,3,...,现在要把“start柱子上的n个盘子移到end柱子,mid柱子为辅助。如果用(a,b,c)表示将编号a的盘子从b柱子移到c柱子,那么下面哪个列表表示两个盘子的解决方法? A: [(1,start,mid),(1,mid,end),(2,start,end)] B: [(2,start,end),(1,mid,end),(1,start,mid)] C: [(1,start,end),(2,start,end),(1,mid,end)] D: [(1,start,mid),(2,start,end),(1,mid,end)]
- 汉诺塔(hanoi塔)问题可以描述为以下递归形式 hanoi(n个盘子, A→B,缓冲柱为C) { if (n==1) 直接从A移到B else { hanoi(n-1个盘子, A→C, 缓冲柱为B) 移动n号盘子:A→B hanoi(n-1个盘子, C→B, 缓冲柱为A) } } 9bd153b5af31717f1112b419266aaa8c.jpg
- 代码填空【汉诺塔问题(a柱为原始柱,b柱为辅助柱,c柱为目标柱)】:void hanoi(int n, char a, char b, char c) { if (n > 0) { _________(1)__________; move(n,a,c); //将n号圆盘从a柱移至c柱 _________(2)_____________; }} A: (1) hanoi(n-1, b, a, c)(2) hanoi(n-1, a, c, b) B: (1) hanoi(n-1, a, b, c)(2) hanoi(n-1, b, c, a) C: (1) hanoi(n-1, b, c, a)(2) hanoi(n-1, a, b, c) D: (1) hanoi(n-1, a, c, b)(2) hanoi(n-1, b, a, c)
- 补全代码解决汉诺塔问题。 def hanoi(n,A,B,C): if (1): print('move',n,'from',A,'to',C) else: hanoi((2),A,C,B) hanoi(1,A,B,C) hanoi((3),(4),(5),(6)) n=int(input('输入盘子数:')) if n: hanoi(n,'A','B','C')
- 汉诺塔(hanoitower) 间题形式化描述为hanoi tower (n, from, to, temp),其中from为起始柱子,to为目标柱子,tem为临时柱子,其含义是将柱子A上的n个盘子借助于柱子C搬动到柱子D上。若要求将柱子A上的n-1个盘子借助柱子C搬到柱子B上,则该问题正确的形式化描述为( ) A: Hanoitower (n-1, from, temp, to) B: Hanoitower(n-1,f to,f rom, temp, ) C: Hanoitower(n-1, temp, to , from) D: Hanoi tower (n-1, to, temp, from)