一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,求总共有多少种走法?
小明有N个球,每次可以取1或2个球,输入球的数量,求出小明取球的方式有几种?
小明读书有两种方式,一种是可以选择精读一本书,另一种是速读两本书,输入书的数量,求出小明读书的方式有几种?
这个问题其实不好,因为读书一般读不一样的书,顺序不同的话差别很大。
其实根本就不用写碰撞算法看,很明显
递归:
一次只能走1,2,3级楼阶,你能走到N级楼阶,肯定是由N-3,N-2,N-1级楼阶走过来的。
答案=N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和。
动态规划:
1级楼阶肯定只有1钟走法
2级楼阶肯定只有2钟走法
3级楼阶肯定只有3钟走法
4级楼阶肯定只有从1,2,3级楼阶走过来,1+2+3=6
5级楼阶肯定只有从2,3,4级楼阶走过来,2+3+6=11
import random
# 碰撞出答案
allResult = set()
for i in range(10000): # 碰撞次数
bookCount = 7 # 书的数量
bookOrder = "" # 读书顺序
while bookCount > 0:
if bookCount == 1:
bookOrder += "1"
break
if random.randint(0,1)==0:
bookOrder += "1"
bookCount -= 1
else:
bookOrder += "2"
bookCount -= 2
allResult.add(bookOrder)
print(len(allResult))
# 根据结果找规律 发现 3=1+2,5=3+3 ...
# 1 1
# 2 2
# 3 3
# 4 5
# 5 8
# 6 13
# 7 21
table = [1,2,3]
def getTable(n):
for i in range(3,n+1):
table.append(table[i-1] + table[i-2])
n = 5
getTable(n)
print(table[n-1])