【蓝桥杯——杨辉三角问题】

杨辉三角是我国古代有名数学家提出的,具体的实现原理如下:

实现原理:

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

以上两种思路都可以实现这道题,选择哪种方法视个人习惯而定,代码实现也比较简单,希望对您有所帮助,如果有的话,请用发财的小手点点赞噢!

今天的出题与解题就到这里辣,有不会的小伙伴们

可以评论区发表意见,我会一一解答哦!

如果您觉得小编写的还可以或者还有哪些地方需要改进的话评论区留言好嘛!

感谢您的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值