资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1 1 1 1 2 1 1 3 3 1
数据规模与约定
1 <= n <= 34。
首先需要理解杨辉三角形的规律,建立二维表格,从第三行起第j (j>1)个数字等于上一行的j-1和j的和。就可以得出s[i][j]=s[i-1][j-1]+s[i-1][j],理解这个之后,这个问题就变得简单,剩下的就是将代码补全。详细看下面的代码
法一:
n=int(input()) #输入一个n行的数
s=[] #存储杨辉三角形
for i in range(n):
s.append(list(range(i+1))) #定义每行的数量
s[i][0]=1
s[i][i]=1 #每行的第一个数和最后一个数都为1
for j in range(1,i):
s[i][j]=s[i-1][j-1]+s[i-1][j]
else:
continue
for x in range(len(s)): #遍历s有几行
while s[x]:
print(s[x].pop(0),end=' ') #不断输出第一位,知道将这一行所有数字输出
else:
print(' ') #换行
法二:
n=int(input())
x=[] # 存放最终结果
for i in range(n):
y=[] # 存放一行,每次清空
for j in range(i+1):
if j ==0 or j == i: #每行第一位和最后一位是1
y.append(1)
else:
y.append(x[i-1][j-1]+x[i-1][j])
x.append(y)
for c in range(len(x)): #输出x列表
while x[c]:
print(x[c].pop(0),end=' ')
else:
print(' ')