#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> triangle(n);
/*vector<vector<int>> triangle(n);
这句定义了一个 二维向量(也可以叫“二维数组”),叫 triangle,它有 n 行,初始时每行是空的。
换句话说,相当于:
triangle[0] 是一个空 vector<int>
triangle[1] 是一个空 vector<int>
...
triangle[n-1] 是一个空 vector<int>
类型是 vector<vector<int>>,即“整数的二维向量”。
triangle(n) 表示创建了 n 个空的行(默认构造)。
🔹 triangle[i].resize(i + 1);
这句表示:把第 i 行的长度变为 i+1,并且每个元素初始值为 0(默认初始化)。
比如:
当 i = 0,则第0行变成 [0](1个元素);
当 i = 1,则第1行变成 [0, 0](2个元素);
当 i = 2,则第2行变成 [0, 0, 0](3个元素);
🔸 整体配合解释
vector<vector<int>> triangle(n);
for (int i = 0; i < n; ++i) {
triangle[i].resize(i + 1); // 第 i 行有 i+1 个元素
}
结果构造出来的是一个“下三角形”的二维数组结构,可以用来存杨辉三角。
*/
for (int i = 0; i < n; ++i) {
// 初始化当前行,大小为i+1
triangle[i].resize(i + 1);
// 每行的首尾元素为1
triangle[i][0] = 1;
triangle[i][i] = 1;
// 计算中间元素:关键
for (int j = 1; j < i; ++j) {
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];
}
for (int j = 0; j <= i; ++j) {
cout << triangle[i][j];
if (j != i) cout << " ";
}
cout << endl;
}
return 0;
}
经典!!STL熟悉一下,数组做法是:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n; // 输入部分
// 定义并初始化二维数组
int triangle[34][34] = {0}; // 题目限制n最大为34
// 计算杨辉三角形
for (int i = 0; i < n; ++i) {
triangle[i][0] = 1; // 每行第一个元素为1
triangle[i][i] = 1; // 每行最后一个元素为1
// 计算中间元素
for (int j = 1; j < i; ++j) {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
}
}
// 输出杨辉三角形
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= i; ++j) {
cout << triangle[i][j];
if (j < i) cout << " "; // 行末不输出空格
}
cout << endl;
}
return 0;
}

京公网安备 11010502036488号