C/C++经典杨辉三角问题解决方案

 更新时间:2023年02月01日 15:20:05   作者:36°熨斗的学习日记  
杨辉三角形,又称帕斯卡三角形、贾宪三角形、海亚姆三角形,它的排列形如三角形。本文将为大家介绍通过C++/C语言实现打印杨辉三角形的示例代码,需要的可以参考一下

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

按理来说,杨辉三角是一个非常经典的问题,以至于随手一搜遍地的代码,但是今天在使用c++实现时遇到了问题,百度出来的没有一个是我想要的答案,所以有了此文。

前言

本文主要讲述了杨辉三角c和c++的具体实现,均为动态。

一、杨辉三角是什么

杨辉三角是二项式系数的集合排列。

具体实现:

是第i行j列的数据是由上一列第j个和j-1个数据相加得到的。

二、C语言版实现步骤

1.开辟动态二维数组

首先开辟一个存储指针的地址的数组,即二级指针用来存放数据。

下一步便是给每一个二级指针的每个元素开辟空间。

代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
int** Creat(int m)
{
    // 杨辉三角每行数据与行数相同
    //先开二级指针
    int** triAngle = (int**)malloc(sizeof(int*) * m);
    assert(triAngle);
    // 再开二级指针中每个元素存储数据的数组
    for (size_t i = 0; i < m; i++)
    {
        triAngle[i] = (int*)malloc(sizeof(int) * (i + 1));
    }
    return triAngle;
}

2.初始化

杨辉三角的两个等腰边的数字是1,数学规律也比较好找,即每行第0个和最后一个是1,接下来就是开头提到的内部的规律:

是第i行j列的数据是由上一列第j个和j-1个数据相加得到的。

代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void Init(int** triAngle, int m)
{
    // 先将两腰上的数据初始化为1
    for (size_t i = 0; i < m; i++)
    {
        if (i == 0)
        {
            triAngle[i][0] = 1;
        }
        else
        {
            triAngle[i][0] = triAngle[i][i - 1] = 1;
        }
    }
    // 构建杨辉三角
    for (size_t i = 0; i < m; i++)
    {
        for (size_t j = 0; j < i; j++)
        {
            if (triAngle[i][j] != 1)
            {
                triAngle[i][j] = triAngle[i - 1][j] + triAngle[i - 1][j - 1];
            }
        }
    }
}

3.打印

两层for循环遍历二维数组进行访问然后打印。

代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
void Print(int** triAngle, int m)
{
    for (size_t i = 0; i < m; i++)
    {
        for (size_t j = 0; j < i; j++)
        {
            printf("%d ", triAngle[i][j]);
        }
        printf("\n");
    }
}

4.销毁

首先释放一级指针,再释放存放它们的二级指针。

代码如下(示例):

1
2
3
4
5
6
7
8
void Destory(int** triAngle, int m)
{
    for (size_t i = 0; i < m; i++)
    {
        free(triAngle[i]);
    }
    free(triAngle);
}

二、C++版实现步骤

1.实现类的成员变量

杨辉三角只需要一个成员变量:二维数组(两个int的vector嵌套)

存放二维数组的行和列可以用_vv.size()和_vv[i].size()来表示。

代码如下(示例):

1
2
3
4
5
6
class Yanghui
{
private:
    vector<vector<int>> _vv;
    size_t _n;
};

2.实现成员函数

与c语言版相同,也需要创建、初始化、销毁。

创建&初始化

我将创建函数实现为了构造函数,目的是为了不用调用,创建的时候就是开辟好的且已经初始化好的vector<vector<int>>。

代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 构建实现为构造函数就不用调用了
    Yanghui(int n = 5)
    {
        _vv.resize(n);
        for (size_t i = 0; i < _vv.size(); i++)
        {
            _vv[i].resize(i + 1);
        }
        // 先初始化两腰数据为1
        for (size_t i = 0; i < _vv.size(); i++)
        {
            _vv[i][0] = _vv[i][_vv[i].size() - 1] = 1;
        }
        // 构建杨辉三角
        for (size_t i = 0; i < _vv.size(); i++)
        {
            for (size_t j = 0; j < _vv[i].size(); j++)
            {
                if (_vv[i][j] != 1)
                {
                    _vv[i][j] = _vv[i - 1][j] + _vv[i - 1][j - 1];
                }
            }
        }
    }

打印

代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
void Print(int n)
    {
        for (size_t i = 0; i < n+1; i++)
        {
            for (size_t j = 0; j < i; j++)
            {
                cout << _vv[i][j] << " ";
            }
            cout << endl;
        }
    }

3.类的总体

代码如下(示例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <vector>
using namespace std;
class Yanghui
{
public:
    // 构建实现为构造函数就不用调用了
    Yanghui(int n = 5)
    {
        _vv.resize(n);
        for (size_t i = 0; i < _vv.size(); i++)
        {
            _vv[i].resize(i + 1);
        }
        // 先初始化两腰数据为1
        for (size_t i = 0; i < _vv.size(); i++)
        {
            _vv[i][0] = _vv[i][_vv[i].size() - 1] = 1;
        }
        // 构建杨辉三角
        for (size_t i = 0; i < _vv.size(); i++)
        {
            for (size_t j = 0; j < _vv[i].size(); j++)
            {
                if (_vv[i][j] != 1)
                {
                    _vv[i][j] = _vv[i - 1][j] + _vv[i - 1][j - 1];
                }
            }
        }
    }
    void Print()
    {
        for (size_t i = 0; i < _vv.size(); i++)
        {
            for (size_t j = 0; j < _vv[i].size(); j++)
            {
                cout << _vv[i][j] << " ";
            }
            cout << endl;
        }
    }
    ~Yanghui()
    {
        cout << "~Yanghui()" << endl;
    }
private:
    vector<vector<int>> _vv;
};
int main()
{
    Yanghui triAngle(5);
    triAngle.Print();
    return 0;
}

到此这篇关于C/C++经典杨辉三角问题解决方案的文章就介绍到这了,更多相关C++杨辉三角内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/leadera_/article/details/128767788

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • Qt显示QImage图像在label上,并保持自适应大小问题

    Qt显示QImage图像在label上,并保持自适应大小问题

    这篇文章主要介绍了Qt显示QImage图像在label上,并保持自适应大小问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 利用Matlab绘制地图的超详细教程

    利用Matlab绘制地图的超详细教程

    worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域。本文将详细为大家介绍如何利用这两个函数绘制地图,需要的可以参考一下
    2022-02-02
  • C++代码实现五子棋小游戏

    C++代码实现五子棋小游戏

    这篇文章主要为大家详细介绍了C++代码实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C/C++左旋字符串实现代码举例

    C/C++左旋字符串实现代码举例

    在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串,下面这篇文章主要给大家介绍了关于C/C++左旋字符串实现的相关资料,需要的朋友可以参考下
    2023-12-12
  • 详解C++句柄类

    详解C++句柄类

    本篇文章给大家详细分析了C++句柄类的相关知识点,对此有需要的朋友跟着学习参考下吧。
    2018-06-06
  • C++面向对象编程之析构详解

    C++面向对象编程之析构详解

    这篇文章主要为大家详细介绍了C++面向对象编程之析构,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++ 关于MFC多线程编程的注意事项

    C++ 关于MFC多线程编程的注意事项

    这篇文章主要介绍了C++ 关于MFC多线程编程的注意事项的相关资料,需要的朋友可以参考下
    2015-06-06
  • C++中declspec(dllexport)和declspec(dllimport) 的用法介绍

    C++中declspec(dllexport)和declspec(dllimport) 的用法介绍

    这篇文章介绍了C++中declspec(dllexport)和declspec(dllimport) 的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • C/C++格式化日志库实现代码

    C/C++格式化日志库实现代码

    这篇文章主要介绍了C/C++格式化日志库实现代码,需要的朋友可以参考下
    2019-04-04
  • Clion下载安装使用的详细教程(Win+MinGW)

    Clion下载安装使用的详细教程(Win+MinGW)

    这篇文章主要介绍了Clion下载安装使用教程(Win+MinGW),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论