Python面试题(二)编程算法

Python编程题

1.      一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

#青蛙调问题

def fib(n):

   if n<=0:

       return -1;

   elif n==1 or n==2:

       return n

   else:

       return fib(n-1)+fib(n-2)

 

a=fib(8)

print(a)

2.      一只青蛙一次可以跳上1级台阶,也可以跳上2……它也可以跳上n级。求该青蛙跳上一个n级的太极总共有多少中跳法。

#青蛙调问题

 

deffib(n):

    if n<=0:

        return -1;

    elif n==1:

        return 1

    else:

        return 2*fib(n-1)

 

a=fib(8)

print(a)

3.      我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少中方法。

#矩形覆盖

'''

def cover(number):

   if number<=0:

       return 0

   f0=0

   f1=1

   fn=f1+f0

   i=2

   while i<=number:

       f0=f1

       f1=fn

       fn=f0+f1

       i=i+1

   return fn

 

print(cover(8))'''

 

def cover(number):

   if number<=0:

       return 0

   if number==1:

       return 1

   if number==2:

       return 2

   return cover(number-1)+cover(number-2)

 

print(cover(8))

4.      在一个mn列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

#杨氏矩阵查找

'''思路:从右上角开始查找,往下是递增的,往左是递减的'''

 

n=int(input("请输入行数:"))

m=int(input("请输入列数:"))

 

line=[[0]*m]*n

 

fori in range(n):

        line[i]=input().split(' ')

 

defget_value(r,s):

    return line[r][s]

 

deffind(number):

    row=len(line)-1#行数

    column=len(line[0])-1#列数

    s=0

    t=column#初始值

   

    while s<=row and t>=0:

        value1=get_value(s,t)

        value=int(value1)

        if value==number:

            return True

        elif value>number:

            t=t-1

        elif value<number:

            s=s+1

    return False

 

if__name__=='__main__':

    value=find(5)

print(value)

5.Python链表操作

#链表的操作

classNode:

        def __init__(self,data):

                self.data=data

                self.next=None

classListNode:

        def __init__(self):

                self.head=None

        #建立链表

        def insert(self,data):

                new=Node(data)

                if self.head is None:

                        self.head=new

                else:

                        node=self.head

                        while node.next:

                                node=node.next

                        node.next=new

        #翻转比如1->2->3->4 变成 2->1->4->3                                       

        def output(self):

                t=self.head.next

                while t:

                        print(t.data)

                        t=t.next

 

if__name__=='__main__':

        t=ListNode()

        t.insert(0)

        t.insert(1)

        t.insert(2)

        t.insert(3)

        t.insert(4)

        t.output()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值