【问题描述】
杨辉三角形,也称帕斯卡三角,其定义为:顶端是 1,视为(row0).第1行(row1)(1&1)两个1,这两个1是由他们上头左右两数之和 (不在三角形内的数视为0).依此类推产生第2行(row2):0+1=1;1+1=2;1+0=1.第3行(row3):0+1=1;1+2=3; 2+1=3;1+0=1. 循此法可以产生以下诸行,如下图所示。
定义一个函数 ,传入正整数参数 M,输出 M 行的杨辉三角(为使格式美观,采用M行中最大数的位数 做为数据输出时的占位宽度和 数据间的间隔)。
【输入形式】
一个正整数,如:12
【输出形式】
此时最大数的位数 为3
def triangle(n):
l=[]
for i in range(n):
if i==0:
l.append([1])
elif i==1:
l.append([1,1])
else:
y = []
for j in range(i+1):
if j==0 or j==i:
y.append(1)
else:
y.append(l[i-1][j]+l[i-1][j-1])
l.append(y)
return l
def printf(n,m):
for i in range(n):
print(' '* (block * (n - i)), end='')#不换行end=''
for j in range(len(x[i])):
print(' ' * (block - len(str(x[i][j]))), end='')
print(x[i][j], end=' ' * block)
print()#换行
n = int(input())
x=triangle(n)
maxNumber = max(x[n-1])
block = len(str(maxNumber))
printf(n, block)