打印杨辉三角形 (Python实现)

文章讲述了如何用Python编程实现杨辉三角形,即Pascal三角形的前n行输出。通过理解其每个数字等于上一行两肩数字之和的规律,建立二维数组并计算各位置的值。提供了两种不同的代码实现方式,分别通过初始化数组和动态更新数组来生成三角形的每一行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源限制

时间限制: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(' ')

### 杨辉三角形实现 以下是通过 Python 实现打印杨辉三角形的一种常见方法。此方法基于列表操作来构建每一层的数据结构并逐行输出。 #### 使用嵌套列表生成杨辉三角形 可以通过迭代的方式逐步计算每行的值,并将其存储在一个二维列表中以便后续处理或显示: ```python def generate_yanghui_triangle(n): triangle = [] for i in range(n): row = [1] * (i + 1) # 初始化当前行为全1 for j in range(1, i): row[j] = triangle[i-1][j-1] + triangle[i-1][j] # 计算中间项 triangle.append(row) return triangle def print_yanghui_triangle(triangle): max_width = len(' '.join(map(str, triangle[-1]))) # 获取最后一行宽度作为最大宽度 for row in triangle: output = ' '.join(map(str, row)) # 将整数转换为字符串形式拼接 print(output.center(max_width)) n = 5 # 定义要打印的层数 triangle = generate_yanghui_triangle(n) print_yanghui_triangle(triangle) ``` 上述代码实现了两个功能模块:`generate_yanghui_triangle` 负责生成整个杨辉三角形数据,而 `print_yanghui_triangle` 则负责格式化输出这些数据[^1]。 #### 基于生成器的实现方式 如果希望减少内存占用或者仅需按顺序访问每一行,则可以采用生成器模式: ```python def yanghui_generator(lines): current_line = [1] yield current_line[:] for _ in range(1, lines): next_line = [1] for index in range(len(current_line)-1): next_line.append(current_line[index]+current_line[index+1]) next_line += [1] current_line = next_line yield current_line[:] lines = 7 gen = yanghui_generator(lines) max_length = sum([len(str(x)) + 1 for x in list(gen)[-1]]) - 1 for line in gen: formatted_line = " ".join(map(str,line)).center(max_length," ") print(formatted_line) ``` 这里定义了一个名为 `yanghui_generator` 的生成器函数,它每次只保留最近的一行用于计算下一行的内容[^3]。 #### 输出样例说明 对于指定层数 n=5 或者其他数值时,程序会按照中心对齐的形式展示相应大小的杨辉三角形图案。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值