python刷题(43-45)

本文探讨了Python实现斐波那契数列及其应用,包括第n项取模运算和计算n级楼梯的不同走法,同时涉及如何优化计算不同砝码组合的代码

Python刷题

PythonTip-挑战Python

(以下代码是在PyCharm上运行成功的,如果想要在刷题上成功运行,需要把前边的定义去掉)

43.题目描述:

斐波那契数列为1,1,2,3,5,8...。数列从第三项起满足,该项的数是其前面两个数之和。现在给你一个正整数n(n < 10000), 请你求出第n个斐波那契数取模20132013的值(斐波那契数列的编号从1开始)。

例如:

n=1, 则输出:1

n=4, 则输出:3

n = 4
l = [1,1]
for i in range (1,10000,1):
    a = l[i]+l[i-1]
    l.append(a)

print(l[n-1]%20132013)

(列出斐波那契数列然后对其取模即可)

44.题目描述: 

有一楼梯共n级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第n级,共有多少种走法? 现在给你一个正整数n(0 < n < 10001)

n = 2
l = [1,1]
for i in range (1,10000,1):
    a = l[i]+l[i-1]
    l.append(a)
print(l[n-1])

(这个问题算是斐波那契数列数列的衍生问题,列表l中第n个存的值就是第n+1级楼梯要走的步数,输出即可)

45.题目描述:

有一组砝码,重量互不相等,分别为m1、m2、m3……mn;它们可取的最大数量分别为x1、x2、x3……xn。 现要用这些砝码去称物体的重量,问能称出多少种不同的重量。 现在给你两个正整数列表w和n, 列表w中的第i个元素w[i]表示第i个砝码的重量,列表n的第 i个元素n[i]表示砝码i的最大数量。i从0开始,请你输出不同重量的种数。 如:w=[1,2], n=[2,1], 则输出5(分析:共有五种重量:0,1,2,3,4)

from itertools import combinations,permutations

w = [1, 2]
n = [2, 0]
weight = [0]
L = len(weight)
temp = []
temp1 = []
for i in range(0,len(w),1):  #求同一个砝码所有组合的可能
    a = w[i]
    b = n[i]
    if b>0:
        weight.append(a)
    while b > 1:
        weight.append(a)
        b = b - 1
weight1 = weight

for j in range(2,len(weight1)+1,1):  #求不同砝码之间的组合
    d = list(permutations(weight1, j))
    for z in range(0,len(d),1):
        temp = sum(d[z])
        #print(temp)
        temp1.append(temp)

weight = weight + temp1
weight = set(weight)

print(len(weight))

(个人觉得这部分代码没有问题,但是现实内存量过大,还需要在改进一些,但是我已经想不到什么好的办法了,先放着,等以后学一学再来改进)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值