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:当时笔试自己逻辑绕弯了没写完整,应该敲头喔)

猜你喜欢

转载自blog.csdn.net/liangzixx/article/details/109102554
今日推荐