请编写程序,显示杨辉三角形。
输入格式
行数(正整数,不超过22)
输出格式
显示指定行数的杨辉三角形
输入样例1
1
结尾无空行
输出样例2
1
结尾无空行
输入样例2
6
结尾无空行
输出样例2
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
结尾无空行
输入样例3
15
结尾无空行
输出样例3
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
结尾无空行
提示:
- 每一行的末尾都没有多余的空格;
- 最末一行最左端的 1 前面无空格。
分析
我们从上面样例发现,杨辉三角的每行行首与每行结尾的数都为1.而且,每个数等于其左上及其右上二数的和。
杨辉三角代码实现的递推公式
在很多题目中,我们常常需要用打表的形式先处理出杨辉三角矩阵,然后再以此为基础进行程序求解。那么我们打表的时候如果手存表格的话,不仅浪费考试时间,而且保证不了空间范围和正确性,这个时候需要我们使用递推的手段用程序处理出表格。
根据杨辉三角的性质,我们推出以下的递推公式:
C[i][j]=C[i−1][j]+C[i−1][j−1];(这也就以为这我们可能需要一个二维数组或者列表)
话不多说,让我们直接来看代码吧
n=int(input())
x=[]//初始化列表
c=0
for i in range(n)://控制每一行(大循环)
print(" "*3*(n-i-1),end='')//根据规律发现题目要求的格式,即第一个数字的位置
a=[1]
x.append(a)//第一个数字为“1”
for j in range(1,i):
a.append(x[i-1][j-1]+x[i-1][j])//依次往列表后加上杨辉三角数
a.append(1)//记得最后一位是“1”
if i==0://把第一行单独拿出来输出,毕竟每一行列表里前后都有“1”
print("%d"%1)
continue
c=len(a)//计算列表内元素个数
b=list(map(int,a))//将元素转变为int类型
for k in range(c):
if k==0:
print(b[k],end='')
continue
print("%6d"%b[k],end='')
print()