ACM新手村必刷题:用C语言手搓倒杨辉三角形(附完整代码与格式对齐技巧)
第一次参加ACM竞赛时,我被一道看似简单的"倒杨辉三角形"题目难住了整整两小时。不是不会算数,而是那些该死的空格怎么都对不齐!相信很多刚接触算法竞赛的同学都有过类似的经历——明明逻辑正确,却因为输出格式被扣分。今天我们就来彻底解决这个痛点,从零开始实现一个完美对齐的倒杨辉三角形。
1. 理解杨辉三角形的本质
杨辉三角形远不止是一个漂亮的数字排列。在数学上,它揭示了二项式系数的几何分布规律。第n行的第k个数字恰好等于组合数C(n,k),也就是从n个不同元素中取出k个的组合数。
杨辉三角形的三个核心性质:
- 每行首尾数字均为1
- 每个内部数字等于其上方两数之和
- 第n行共有n个元素
理解这些性质是编写生成算法的关键。我们先来看正杨辉三角形的生成代码:
int n = 5; // 假设需要5行
int triangle[n][n];
// 初始化首尾为1
for(int i=0; i<n; i++) {
triangle[i][0] = 1;
triangle[i][i] = 1;
}
// 填充内部元素
for(int i=2; i<n; i++) {
for(int j=1; j<i; j++) {
triangle[i][j] = triangle[i-1][j] + triangle[i-1][j-1];
}
}
2. 从正三角到倒三角的转变
倒杨辉三角形并不是简单地将数字倒序排列,而是需要将整个三角形上下颠倒。以5行为例:
原始正三角:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
倒置后应该变为:
1 4 6 4 1
1 3 3 1
1 2 1
1 1
1
</

&spm=1001.2101.3001.5002&articleId=97108626&d=1&t=3&u=197c367c10d34b09a06aa55f7b7f486e)
337

被折叠的 条评论
为什么被折叠?



