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



