题解 | #大吉大利,今晚吃鸡#
大吉大利,今晚吃鸡
http://www.nowcoder.com/practice/c9d9f9c60b4448eabc0569f80a3461bb
目标是更好的解释
import sys
cnt=0
def hanoi(n):
global cnt
# 最终状态判断,当无盘需要移动时停止
# 注意实际上最后一步的移动是之前移动的子集
# 不用自增cnt
if(n==0):
return
# 1为最大盘,X是它上面的所有盘集合
# --------------------
# 1 0 X,一次移动n-1个盘
hanoi(n-1)
# --------------------
# 将1 0 X > 0 1 X,即移动一次cnt+1
cnt+=1
# 注意步数自增了但是没调用函数
# 因为三个柱没本质区别且最大盘X所在位置不影响移动
# --------------------
# 0 1 X > X 1 0
hanoi(n-1)
# --------------------
# X 1 0 > X 0 1
cnt+=1
# --------------------
# X 0 1 > 0 0 X/1
hanoi(n-1)
# --------------------
n = [i for i in sys.stdin.readlines()]
n = list(map(int, n))
for i in n:
hanoi(i)
print(cnt)
cnt=0