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