池中物
全部博文(43)
分类: Python/Ruby
2013-11-16 16:30:38
'''
杨辉三角
(a+b)的n次幂的展开式中各项的系数很有规律,
对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
违反约束返回0
约束m小于等于1000,大于等于0
'''
#方法一:
class Demo:
def triangle(self,x,y):
if x < 0 or x > 1000 or y < 0 or y > x:
return 0
lst = [1]
for i in range(1, x+1):
lst = [0] + lst + [0]
# lst = [lst[j]+lst[j+1] for j in range(i+1)] #可以如此
# lst = [lst[i]+lst[i+1] for i in range(i+1)] #可以如此,i为临时变量
temp = [lst[j]+lst[j+1] for j in range(i+1)]
lst = temp
# print lst #打印杨辉三角
return lst[y]
#方法二:
class Demo:
def triangle(self,x,y):
if x < 0 or x > 1000 or y < 0 or y > x:
return 0
# lst = [1]
# for i in range(1, x+1):
# lst = [0] + lst + [0]
# temp = [lst[j]+lst[j+1] for j in range(i+1)]
# lst = temp
# return lst[y]
# if 0 == x or 0 == y :
# return 1
result = 1
for i in range(1,y+1):
result = result *(x - y + i)/i
return result