#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; }