杨辉三角是我国古代有名数学家提出的,具体的实现原理如下:
实现原理:
1. 每个数等于它上方两数之和。
2. 左右边缘的数都为1。3. 第 n 行的数字有 n 项。
题目描述: 输入一个数 n,请输出n层的杨辉三角。例如,n = 4:
1 1 1 1 2 1 1 3 3 1
解题思路: 要求输出杨辉三角,需要先了解杨辉三角本身的构成规律。主要有两个方向进行思考,一是根据杨辉三角的定义,按行输出,另一个则是按照输出的数字规律构建杨辉三角。具体的实现原理上文已给出。
接下来,就用c++语言代码通过两种方法来实现杨辉三角。
解题思路一:vector:动态数组
根据定义按行输出,可以使用递归函数实现,递归求解出需要输出的每一行数据,再对这些数据进行输出。代码如下:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<int> getRow(int n) {
if (n == 0) {
return {1};
}
vector<int> row(n + 1, 1);
vector<int> lastRow = getRow(n - 1);
for (int i = 1; i < n; ++i) {
row[i] = lastRow[i - 1] + lastRow[i];
}
return row;
}
int main() {
int n;
cin>>n;
for (int i = 0; i < n; i++) {
int spaceCount = 2 * (n - (i+1)) + 1;
cout<<string(spaceCount, ' ');
vector<int> row = getRow(i);
for (int num : row) {
cout<<num<<" ";
}
cout<<endl;
}
return 0;
}
解题思路二:
根据按照数字规律构建杨辉三角的思路,从第一行开始计算每个数字,同时使用二维数组存储每个位置上的数字,最后再按照行输出。代码如下
#include <iostream>
#include <string>
using namespace std;
const int N = 110;
int main() {
int n;
cin>>n;
int a[N][N] = {0};
a[1][1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for (int i = 1; i <= n; i++) {
int spaceCount = 2 * (n - i) + 1;
cout<<string(spaceCount, ' ');
for (int j = 1; j <= i; j++) {
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
以上两种思路都可以实现这道题,选择哪种方法视个人习惯而定,代码实现也比较简单,希望对您有所帮助,如果有的话,请用发财的小手点点赞噢!
今天的出题与解题就到这里辣,有不会的小伙伴们
可以评论区发表意见,我会一一解答哦!
如果您觉得小编写的还可以或者还有哪些地方需要改进的话评论区留言好嘛!
感谢您的阅读!