C++\打印杨辉三角
时间: 2025-01-06 18:44:27 浏览: 1
### C++ 实现打印杨辉三角
为了实现打印杨辉三角,在C++中有多种方法可以选择。一种常见的方式是通过二维数组来存储每一层的数据,再逐行输出这些数据。
以下是基于给定的参考资料所整理的一个较为简洁且易于理解的例子:
```cpp
#include <iostream>
using namespace std;
#define N 35 // 定义最大层数为34
int main() {
int a[N][N], n, i, j;
cin >> n; // 输入要显示的最大层数
for (i = 1; i <= n; i++)
for (j = 1; j <= i; j++) {
if (j == 1 || j == i) // 如果是在每行的第一个或最后一个位置,则赋值为1
a[i][j] = 1;
else
a[i][j] = a[i-1][j-1] + a[i-1][j]; // 否则按照杨辉三角规律计算当前单元格的值
}
// 输出构建好的杨辉三角形
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
```
这段程序首先定义了一个大小固定的二维数组`a[][]`用于保存各层元素,并接受用户输入指定想要展示多少层的杨辉三角[^1]。接着利用双重循环结构填充这个矩阵,其中外层控制行数变化而内层负责列的变化。对于每一个非边界节点(即不是最左边也不是最右边),其值等于上一层相邻两个数值之和。最后再次遍历整个表格并按照行优先顺序依次输出各个元素完成图形绘制[^2]。
此外还有一种更高效的方法采用动态规划的思想,使用一维向量代替传统意义上的多维表单来进行操作,这样不仅能够减少不必要的内存占用还能提高运行效率。具体做法如下所示:
```cpp
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> result(numRows);
for (int row = 0; row < numRows; ++row) {
result[row].resize(row + 1); // 动态调整本行长度
result[row][0] = result[row][row] = 1; // 设置两端固定为1
for (int col = 1; col < row; ++col)
result[row][col] = result[row - 1][col] + result[row - 1][col - 1];
}
return result;
}
};
```
此版本中创建了一个名为 `Solution` 的类,内部包含一个公共成员函数 `generate()` 接受参数 `numRows` 表示所需生成的总层数目。这里采用了STL中的容器——向量(`vector`)作为底层数据结构,每次迭代时都会根据实际需求重新分配合适的空间尺寸以适应不同规模的任务要求[^3]。
阅读全文