汉诺塔

来源:互联网 发布:淘宝在哪开店 编辑:程序博客网 时间:2024/04/30 13:25

题目一:
给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有圆盘都移到右边的柱子上。实现函数打印最优移动轨迹。

函数中B代表中间柱子,是用来放置最大盘子上面的n-1个盘子的,过程就是先把最大盘子上面的n-1个盘子移动到B,再将最大盘子从A移动到C,当前n-1个盘子所在的B相当于A,再递归将这N-1个盘子从B移到C。

#coding=utf-8def solution(n,A,B,C):    if n==0:        return    solution(n-1,A,C,B)    print A+'->'+C    solution(n-1,B,A,C)solution(3,'A','B','C')

题目二:
有一个int数组arr其中只含有1、2和3,分别代表所有圆盘目前的状态,1代表左柱,2代表中柱,3代表右柱,arr[i]的值代表第i+1个圆盘的位置。比如,arr=[3,3,2,1],代表第1个圆盘在右柱上、第2个圆盘在右柱上、第3个圆盘在中柱上、第4个圆盘在左柱上。如果arr代表的状态是最优移动轨迹过程中出现的状态,返回arr这种状态是最优移动轨迹中的第几个状态。如果arr代表的状态不是最优移动轨迹过程中出现的状态,则返回-1。
给定一个int数组arr及数组的大小n,含义如题所述,请返回一个int,代表所求的结果。

https://www.nowcoder.com/questionTerminal/b2d552cd60b7415fad2612a32e799812
来源:牛客网

# -*- coding:utf-8 -*-class Hanoi:    def process(self, arr, n,fom,mid,to):        # write code here        if n==-1:            return 0        if arr[n]!=fom and arr[n]!=to:            return -1        if arr[n]==fom:            return self.process(arr,n-1,fom,to,mid)        else:            rest=self.process(arr,n-1,mid,fom,to)            if rest==-1:                return -1            return (1<<n)+rest    def chkStep(self,arr,n):        if n<=0:            return -1        return self.process(arr,n-1,1,2,3)