帕斯卡三角形,又称杨辉三角形是二项式系数在三角形中的一种几何排列。帕斯卡三角形通常从第0行开始枚举,并且每一行的数字是上一行相邻两个数字的和。在第0行只写一个数字1,然后构造下一行的元素。将上一行中数字左侧上方和右侧上方的数值相加。如果左侧上方或者右侧上方的数字不存在,用0替代。下面给出6行的帕斯卡三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
编写程序,输入帕斯卡三角形的高度 n,然后生成和上面例子一样风格的三角形。
输入格式:
一个正整数 n
输出格式:
相应高度的帕斯卡三角形,两个数字之间有一个空格
输入样例:
6
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
时间限制:500ms内存限制:32000kb
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime as dt
starttime = dt.datetime.now()
def pascalLine(num):
if num == 0:
return [1]
else:
return [([0] + pascalLine(num - 1))[i] + (pascalLine(num - 1) + [0])[i] for i in range(num + 1)]
if __name__ == '__main__':
n = int(raw_input())
for i in xrange(0, n):
l = pascalLine(i)
s = ''
for j in l:
s = s + str(j) + ' '
print ' ' * (n - i - 1) + s[:-1]
endtime = dt.datetime.now()
print "Use time: "
print str((endtime - starttime).seconds) + "s"
def pascalLine_v2(num):
l = [1]
if num == 0:
return l
else:
for i in xrange(num):
l = [0] + l[:] + [0]
l = [l[i] + l[i + 1] for i in range(len(l) - 1)]
return l
def pascalLine_v2(num):
l = [1]
if num == 0:
return l
else:
for i in xrange(num):
l = [sum(i) for i in zip([0] + l, l + [0])]
return l
print ' ' * (n - i - 1) + s[:-1]
print s.center(2 * n, ' ')