跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

c++如何实现杨辉三角_c++二维数组应用实例【练习】

推荐用嵌套std::vector构造杨辉三角:自动内存管理、按需增长;需逐行push_back初始化,避免越界;递推只依赖上一行,边界为1;打印时统一setw对齐防塌陷。 用
std::vector<:vector>>
动态构造杨辉三角更安全 直接用
int a[100][100]
静态数组写杨辉三角,看着简单,但一旦行数超限就崩溃,而且无法返回给调用方复用。C++ 里推荐用嵌套
std::vector
—— 它自动管理内存,还能按需增长。 常见错误是只初始化外层 vector,忘了每行也要
resize
或用
push_back
填充:
// ❌ 错误:第二维没分配,访问 a[i][j] 会越界 vector> a(n); a[0][0] = 1; // 段错误!

// ✅ 正确:逐行构造,每行长度递增 vector> triangle; for (int i = 0; i < n; ++i) { triangle.push_back(vector(i + 1, 1)); // 每行初值全设为 1 }

核心逻辑:只依赖上一行,避免重复计算 杨辉三角第
i
行第
j
列(从 0 开始)的值,只由上一行的
triangle[i-1][j-1]
和
triangle[i-1][j]
决定。边界(
j == 0
或
j == i
)始终为 1。 别在循环里反复求组合数(比如
C(n,k)
),整数溢出快、性能差 别从左到右覆盖当前行——会污染还未读取的上一行数据;要么从右往左填,要么用独立变量暂存 实际只要两行空间就能滚动计算,但练习阶段建议先写清楚三重结构:初始化 → 边界处理 → 中间递推 输出对齐问题常被忽略,但影响可读性 打印时若不补空格,三角形会“塌”成直角形。关键不是用
\t
(制表符宽度不固定),而是算每行前面要多少个空格: 立即学习 “ C++免费学习笔记(深入) ”; C知道 CSDN推出的一款AI技术问答工具 下载 最后一行有
n
个数,假设每个数最多占 4 字符(如 "1234"),那首行前面要留约
2 * (n - 1)
个空格 更稳妥的做法:先生成全部数据,再遍历找最大值位数,统一用
setw
格式化 调试时可先关闭对齐,确认数值正确后再加格式;否则数值错+排版乱,双倍难排查 示例片段(仅对齐逻辑):
int width = to_string(triangle.back().back()).length(); for (int i = 0; i < n; ++i) { cout << string((n - i - 1) * width, ' '); // 左侧缩进 for (int x : triangle[i]) { cout << setw(width) << x << " "; } cout << "\n"; }
输入校验和边界情况必须手动处理
n = 0
或
n = 1
是高频出错点。标准库不会帮你判断“用户输了个负数”,也不会自动返回空三角。
n :应直接返回空 vector
,而不是继续执行导致未定义行为
n == 1
:只有一行
{1}
,别漏掉这个特例,否则循环从
i = 1
开始就跳过了 如果函数要返回三角,签名建议用
vector> generate(int numRows)
,而不是 void + 传引用——语义清晰,也方便单元测试 真正容易卡住的,往往是第 0 行怎么建、第 1 行怎么填、循环下标从 0 还是 1 起——这些细节不写出来,光看公式根本没法 debug。

相关文章