东方博宜 1275 - 输出杨辉三角的前N行

问题描述

输出杨辉三角的前 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;
}    

代码解释

  1. 输入:首先读取用户输入的整数a,它代表杨辉三角的行数。
  2. 初始化:使用vector<int> row来存储当前行的元素。
  3. 循环生成每一行:外层循环for (int i = 0; i < a; ++i)控制生成杨辉三角的每一行。对于每一行,创建一个新的vector<int> newRow,其大小为i + 1,并初始化为全 1。
  4. 计算中间元素:内层循环for (int j = 1; j < i; ++j)计算当前行中间元素的值,每个中间元素等于上一行相邻两个元素之和。
  5. 输出当前行:通过循环for (int k = 0; k < i + 1; ++k)输出当前行的元素,并在元素间添加空格,最后换行。
  6. 更新当前行:将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;
}

代码解释

  1. 输入:首先程序会提示你输入要输出杨辉三角的行数 n
  2. 二维数组初始化:定义了一个二维数组 triangle[MAXN][MAXN] 来存储杨辉三角的元素,并且将其初始化为全 0。同时,把每行的第一个元素和最后一个元素设为 1。
  3. 计算中间元素:利用杨辉三角的性质,即每个中间元素等于它上方两数之和,通过嵌套循环来计算其余元素的值。
  4. 输出结果:最后通过嵌套循环将二维数组中存储的杨辉三角元素输出。

要注意,代码里 MAXN 代表二维数组的最大大小,你可以依据实际需求调整这个值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值