C++:详解控制台输出杨辉三角

杨辉三角

首先杨辉三角如下:
从第三行开始,除首尾是1外中间的数都等于其“肩”上的两位数之和。

在这里插入图片描述

Q:那么如何用控制台输出杨辉三角?
思路一:

先列表
在这里插入图片描述
将没有值的地方填充为 0
在这里插入图片描述
然后可以动态创建两个一维数组a和b,一个用于当前列的输出;一个用于记录上一列的值,并为下一列赋值。在第0行和第1行的时候,b数组总是复制a数组的值。到第2行时,b数组的用处就开始了,因为若a加上前一个数的值付给a时,原来的值就不见了,再循环就会出现如下错误:
在这里插入图片描述
所以b数组的存在就是为了避免这种情况发生。
用两个数组可以减少建二维数组做表所用的的存储空间,提高效率。

源代码:
yang是定义的方法,在入口函数main的文件中写,需在调用前定义好。
下列代码在vs2019社区版可以运行。

//*************code by senlinxing
#include <iostream>
using namespace std;
void yang(int n)
{
    int* a = new int[n];//这里是动态分配数组,因为直接int a[n]是不对的,中括号里的是常量不是变量
    int* b = new int[n];//记录上一行的数组
    for (int x = 0; x < n; x++)
    {
        a[x] = 0;//初始化
        b[x] = 0;//初始化
    }
    for (int i = 0; i < n; i++)//行
    {    
        for (int j = 0; j < i + 1; j++)//列
        {
            if (i < 2)
            {
                a[j] = 1;
                b[j] = 1;
                cout << a[j] << " ";
            }
            else
            {
                if (j == 0)
                {
                    a[j] = a[j] + a[n - 1];//第2(行从0开始)行开始第一个数字的上方两位是它本身列号和最后一列的相加
                    b[j] = a[j];
                    cout << a[j] << " ";
                }
                else
                { 
                    b[j] = a[j];
                    a[j] = b[j] + b[j - 1];
                    cout << a[j] << " ";                   
                }
            }
        }
        cout << endl;        
    }
}
int main()
{
    yang(6);//参数是输出的杨辉三角行数
    return 0;
}
//*************

运行效果:
输出6行杨辉三角
在这里插入图片描述
输出20行
在这里插入图片描述
以上。
(ps:当时笔试自己逻辑绕弯了没写完整,应该敲头喔)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值