【问题描述】
小青蛙跳台阶,一次可以向上跳跃1级或2级台阶,请输入台阶总数n,计算并输出青蛙到达n级台阶共计有多少种可行的方法。
【输入形式】输入整数n
【输出形式】输出方法数x
【样例输入】46
【样例输出】到达46级台阶的方法有2971215073种
【样例说明】
【评分标准】
def jump(n):
if n == 1:
return 1
if n == 2:
return 2
f1, f2 = 1, 2
for i in range(3, n+1):
f3 = f1 + f2
f1, f2= f2, f3
return f3
n=eval(input())
m=jump(n)
print("到达{}级台阶的方法有{}种".format(n,m))
以上的方法采用了“动态规划算法”,比较容易理解。
以下为简单的采用一般程序设计,用简单的数学思维来理解。
def fact(n,m):
s=1
y=1
u=1
for i in range (1,n+1):
s*=i
for j in range (1,m+1):
y*=j
for k in range (1,m+n+1):
u*=k
s=u//(s*y)
return s#建立一个题目所需的计算排列组合的函数
n=eval(input())
num=0
for i in range (0,n+1):
for j in range (0,n+1):
if n==i+2*j:#找出所有的上一级和上两级的方案
if i !=0 and j!=0:
o1 = fact(i, j)#对每一种方案进行排列组合
num = num + o1
else:
if i ==0:
num=num+1
if j==0:
num=num+1
print("到达{}级台阶的方法有{}种".format(n,num))