这天我在做华师大复试18年试题,第二题是杨辉三角
B. 梵高先生 - 2018 研究生面试机考 (软件工程) - ECNU Online Judge
先去看一下杨辉三角形定义:
杨辉三角形,也称帕斯卡三角形(Pascal's Triangle),是一种在数学中用来展示二项式系数的一个三角形阵列。它以中国数学家杨辉的名字命名,他在南宋时期的著作中对这个数学概念进行了描述。然而,这个数学结构在杨辉之前就已经在其他文化中被发现,最著名的是在12世纪的波斯数学家在其作品中描述了这个三角形,以及在17世纪由布莱士·帕斯卡进一步研究而在西方世界变得广为人知。
杨辉三角形的构造非常简单,每一行的数字是由上一行的数字相加而成。具体规则如下:
- 三角形的顶端(第0行)是数字1。
- 三角形的每一行都代表二项式展开的系数。
- 除了每行的两端的数字为1之外,任何其他位置的数字都是由它正上方和正上方左边的两个数字之和构成的。
例如,杨辉三角形的前几行如下所示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
这样看不是很明显
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
这样看就明显了,下行的数是它左上和右上之和
比如
3 3
6
6=3+3
这是GPT给的
def print_pascals_triangle(rows):
triangle = [] # 初始化一个空列表来存储整个三角形
for row_num in range(rows):
# 每一行的第一个数字总是1
row = [1]
if triangle: # 如果列表不为空,即不是第一行,就计算中间的值
last_row = triangle[-1] # 获取上一行的数据
# 生成中间的数值,通过上一行相邻两数之和获得
row.extend([last_row[i] + last_row[i + 1] for i in range(len(last_row) - 1)])
# 每一行的最后一个数字也是1
row.append(1)
triangle.append(row) # 将当前行添加到三角形列表中
# 打印杨辉三角形
for row in triangle:
print(" ".join(map(str, row)).center(2*rows))
# 调用函数,参数为想要的行数
n=int(input())
print_pascals_triangle(n)
这样生成的是这样的
然后我想要的是这样没有空格的
所以把.center(2*rows)去掉就好了,
gpt说
.center(2*rows)
: center
方法是字符串的一个方法,它将字符串居中,并使用空格填充至指定的宽度。这里的宽度是2*rows
,rows
是杨辉三角形的总行数。乘以2是一个简单的方式来估计足够的宽度,使得三角形在控制台输出时看起来是居中的。这个宽度不是精确计算的,但通常足够使输出看起来比较整齐。如果三角形的行数很大,可能需要调整这个乘数来更好地适应。
我这里试试看不同的center
1*rows
5*rows
100*rows
3
我懂了,这个center的参数是这一行的总长度
看一下GPT解释
了解了。
这个函数好就好在不用管在计算的这一行的值的索引,直接从第二个开始一个一个expend就可以了。