Python Floyd 三角形

12 Apr 2025 | 7 分钟阅读

创建弗洛伊德三角形是初学者学习编程的常见练习,因为它有助于理解嵌套循环和序列生成。

在接下来的教程中,我们将学习如何使用 Python 作为编程语言来构建弗洛伊德三角形。但在开始之前,让我们先讨论一下什么是弗洛伊德三角形。

什么是弗洛伊德三角形?

弗洛伊德三角形是一种由自然数组成的模式,呈直角三角形的形式。弗洛伊德三角形中的数字是逐行递增排列的。这个模式由著名的计算机科学家罗伯特·弗洛伊德推广并以其命名。

弗洛伊德三角形的第一行从数字 1 开始,每一行比前一行多一个元素。数字按顺序连续排列。

弗洛伊德三角形的关键特征

弗洛伊德三角形的关键特征如下:

  1. 连续自然数:弗洛伊德三角形由连续的自然数组成,按行递增排列,从 1 开始,每行增加 1。
  2. 三角形形状:弗洛伊德三角形是一种直角三角形模式,其中每一行比前一行多一个元素。
  3. 每行以新数字开始:每行的第一个数字是前一行结束后的下一个连续 自然数。弗洛伊德三角形的这一特征确保了三角形中的所有数字都是唯一的且按升序排列。
  4. 行是递增的:弗洛伊德三角形的行数取决于我们希望包含的自然数数量。例如,如果我们想包含前 15 个自然数,我们将有一个包含 5 行的弗洛伊德三角形(1、2、3、4、5、6、7、8、9、10、11、12、13、14、15 在五行中)。
  5. 任意起始数字:虽然弗洛伊德三角形最通用的形式从 1 开始,但我们可以通过从任何其他自然数开始并遵循相同的模式来创建变体。
  6. 行之和:我们可以借助等差数列公式计算每行的数字之和,使其成为一个有趣的数学练习。

理解弗洛伊德三角形的结构

弗洛伊德三角形遵循基本结构:

  1. 第一行包含一个数字
  2. 第二行包含两个数字
  3. 第三行包含三个数字
  4. 第四行包含四个数字

这个模式继续下去,每一行都比它上面的行多一个元素。

弗洛伊德三角形的一些例子

为了更好地理解和清晰起见,我们将查看弗洛伊德三角形的一些示例。

示例 1:3 行的弗洛伊德三角形

具有四行的弗洛伊德三角形将有 6 个自然数排列成一个具有 3 行的直角三角形。

输出

 
1
2 3
4 5 6   

在上面的弗洛伊德三角形中:

  • 第一行有 1 个元素:1
  • 第二行有 2 个元素:2 3
  • 第三行有 3 个元素:4 5 6

该模式遵循 三角数 序列,其中第 n 行的元素数量由以下公式给出:

Tn = n(n + 1)/2

因此,对于 n = 3,元素总数:

T3 = 3(3 + 1)/2 = 3(4)/2 = 6

让我们考虑弗洛伊德三角形的一些更多示例。

示例 2:4 行的弗洛伊德三角形

具有四行的弗洛伊德三角形将有 10 个自然数排列成一个具有 4 行的直角三角形。

输出

 
1
2 3
4 5 6
7 8 9 10   

在上面的弗洛伊德三角形中:

  • 第一行有 1 个元素:1
  • 第二行有 2 个元素:2 3
  • 第三行有 3 个元素:4 5 6
  • 第四行有 4 个元素:7 8 9 10

对于 n = 4,元素总数:

T4 = 4(4 + 1)/2 = 4(5)/2 = 10

示例 3:5 行的弗洛伊德三角形

具有四行的弗洛伊德三角形将有 15 个自然数排列成一个具有 5 行的直角三角形。

输出

 
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15   

在上面的弗洛伊德三角形中:

  • 第一行有 1 个元素:1
  • 第二行有 2 个元素:2 3
  • 第三行有 3 个元素:4 5 6
  • 第四行有 4 个元素:7 8 9 10
  • 第五行有 5 个元素:11 12 13 14 15

对于 n = 5,元素总数:

T5 = 5(5 + 1)/2 = 5(6)/2 = 15

示例 4:6 行的弗洛伊德三角形

具有四行的弗洛伊德三角形将有 21 个自然数排列成一个具有 6 行的直角三角形。

输出

 
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21   

在上面的弗洛伊德三角形中:

  • 第一行有 1 个元素:1
  • 第二行有 2 个元素:2 3
  • 第三行有 3 个元素:4 5 6
  • 第四行有 4 个元素:7 8 9 10
  • 第五行有 5 个元素:11 12 13 14 15
  • 第六行有 6 个元素:16 17 18 19 20 21

对于 n = 6,元素总数:

T6 = 6(6 + 1)/2 = 6(7)/2 = 21

生成弗洛伊德三角形的算法

我们现在来看看生成弗洛伊德三角形的算法。算法的关键思想是逐行打印数字,并在每次打印后递增数字。

我们将遵循以下步骤来生成弗洛伊德三角形:

步骤 1:开始

  • 我们将开始执行程序。

步骤 2:输入行数

  • 用户提供行数 numOfRows,它决定了三角形将有多少层。

步骤 3:初始化起始数字

  • 我们将设置一个变量 number = 1。它将保存三角形的第一个数字,并在打印数字时递增。

步骤 4:外层循环(行)

  • 一个循环从 i = 1 到 numOfRows 运行,其中 i 表示当前行。
  • 每行 i 应包含正好 i 个数字。

步骤 5:内层循环(打印数字)

  • 在行循环内,我们将运行另一个从 j = 1 到 i 的循环,其中 j 表示该行的元素数量。
  • 在每次迭代中打印数字,后面跟着一个空格以正确格式化。
  • 然后我们将递增数字。

步骤 6:移至下一行

  • 打印完当前行的所有数字后,使用换行符(print())移至下一行。

步骤 7:重复直到完成

  • 循环继续,直到打印完 numOfRows 行。

步骤 8:结束程序

  • 打印完所有行后,程序终止。

现在,让我们看下面的伪代码,它说明了我们讨论过的算法。

伪代码

为了更好地理解,让我们看一个上述算法的示例执行。

示例

假设 numOfRows = 5

迭代 1 (i = 1)

  • 内层循环运行一次:j = 1
  • 打印:1
  • 递增数字:2
  • 移至下一行

迭代 2 (i = 2)

  • 内层循环运行两次:j = 1, 2
  • 打印:2 3
  • 递增数字:4
  • 移至下一行

迭代 3 (i = 3)

  • 内层循环运行三次:j = 1, 2, 3
  • 打印:4 5 6
  • 递增数字:7
  • 移至下一行

迭代 4 (i = 4)

  • 内层循环运行四次:j = 1, 2, 3, 4
  • 打印:7 8 9 10
  • 递增数字:11
  • 移至下一行

迭代 5 (i = 5)

  • 内层循环运行五次:j = 1, 2, 3, 4, 5
  • 打印:11 12 13 14 15
  • 结束循环

输出

 
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15   

使用 Python 生成弗洛伊德三角形

我们现在将查看以下 Python 代码来生成弗洛伊德三角形。

代码

输出

 
Enter the number of rows: 5
Floyd's Triangle:
1 
2 3 
4 5 6 
7 8 9 10 
11 12 13 14 15   

说明

在上面的代码片段中,我们定义了一个名为 floydsTriangle() 的函数,它接受一个参数 - numOfRows。在此函数内,我们初始化了一个起始数字 num = 1,并迭代了给定的行数。然后我们迭代了每一行中的元素。在 嵌套循环 中,我们打印了数字,将 num 的初始值增加了 1,然后跳出内层循环以移至下一行。

对于 主函数,我们从用户那里获取了行数输入,并调用了 floydstriangle() 函数来为所需的行数构建弗洛伊德三角形。

复杂度分析

  • 时间复杂度: O(N^2),因为有嵌套循环。
  • 空间复杂度: O(1),因为只使用了几个变量。