问题描述
输出杨辉三角的前 N 行( N<10 )。
输入
输入只有一行,包括 1 个整数 N 。
输出
输出只有 N 行。
样例
输入
5
输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
代码:
1.一维数组
#include <iostream>
#include <vector>
using namespace std;
int main() {
int a;
cin >> a;
vector<int> row;
for (int i = 0; i < a; ++i) {
vector<int> newRow(i + 1, 1);
for (int j = 1; j < i; ++j) {
newRow[j] = row[j - 1] + row[j];
}
for (int k = 0; k < i + 1; ++k) {
cout << newRow[k];
if (k < i) {
cout << " ";
}
}
cout << endl;
row = newRow;
}
return 0;
}
代码解释
- 输入:首先读取用户输入的整数
a
,它代表杨辉三角的行数。 - 初始化:使用
vector<int> row
来存储当前行的元素。 - 循环生成每一行:外层循环
for (int i = 0; i < a; ++i)
控制生成杨辉三角的每一行。对于每一行,创建一个新的vector<int> newRow
,其大小为i + 1
,并初始化为全 1。 - 计算中间元素:内层循环
for (int j = 1; j < i; ++j)
计算当前行中间元素的值,每个中间元素等于上一行相邻两个元素之和。 - 输出当前行:通过循环
for (int k = 0; k < i + 1; ++k)
输出当前行的元素,并在元素间添加空格,最后换行。 - 更新当前行:将
newRow
赋值给row
,以便在下一次迭代中使用。
通过这种方式,代码使用一维数组实现了杨辉三角的生成和打印,减少了空间复杂度。
2.二维数组
#include <iostream>
using namespace std;
const int MAXN = 100;
int main() {
int n;
cin >> n;
int triangle[MAXN][MAXN] = {0};
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 - 1] + triangle[i - 1][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cout << triangle[i][j] << " ";
}
cout << endl;
}
return 0;
}
代码解释
- 输入:首先程序会提示你输入要输出杨辉三角的行数
n
。 - 二维数组初始化:定义了一个二维数组
triangle[MAXN][MAXN]
来存储杨辉三角的元素,并且将其初始化为全 0。同时,把每行的第一个元素和最后一个元素设为 1。 - 计算中间元素:利用杨辉三角的性质,即每个中间元素等于它上方两数之和,通过嵌套循环来计算其余元素的值。
- 输出结果:最后通过嵌套循环将二维数组中存储的杨辉三角元素输出。
要注意,代码里 MAXN
代表二维数组的最大大小,你可以依据实际需求调整这个值。