刷题 | 杨辉三角



题目

问:
在屏幕上打印杨辉三角

1

1 1

1 2 1

1 3 3 1

……

输入描述:
输入为一行,输入一个整数5,表示5行杨辉三角
输出描述:
输出5行杨辉三角


解法

1. 确定思路

  • 杨辉三角,是二项式系数在三角形中的一种几何排列,可以观察到外层都是1
  • 从第二行开始,除了外层的1之外的数字都是上一层相邻两数之和
  • 在观察要求打印的排列方式,类似于三角形,那我们就当做一个二维数组来打印就好了

2. 编写代码

  • 根据上述思路,我们定义一个55列的二维数组

对应代码:

int arr[5][5] = { 0 };
  • 给这个二维数组初始化,先针对外层的1。可以观察到,只要是第一列和对角线上的元素都是1

对应代码:

if (i == j || j == 0)
arr[i][j] = 1;
  • 当1都初始化好了,其他内层元素都是它上面的元素以及左上角元素之和

对应代码:

if (i > 1 && j < i)
{
 arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
  • 由于是遍历初始化二维数组,所以需要再嵌套循环

对应代码:

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i == j || j == 0)
                arr[i][j] = 1;
            if (i > 1 && j < i)
            {
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
            }

        }
    }
  • 功能已经实现,关键在于打印!我们刚刚分析的时候是把杨辉三角当做左下三角矩阵分析的,但是打印的时候要打成金字塔似的才接近完美
  • 于是每行打印之前都要打印相应数量的空格

对应代码:

    for (int i = 0; i < 5; i++)
    {
        for (int k = 0; k < 4 - i; k++)
            printf(" ");
        for (int j = 0; j < 5; j++)
            printf("%.d ", arr[i][j]);
        printf("\n");
    }
  • 咱们看看打印结果:
    在这里插入图片描述

附上完整代码:

#include<stdio.h>
//杨辉三角
int main()
{
    int arr[5][5] = { 0 };
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i == j || j == 0)
                arr[i][j] = 1;
            if (i > 1 && j < i)
            {
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
            }

        }
    }

    for (int i = 0; i < 5; i++)
    {
        for (int k = 0; k < 4 - i; k++)
            printf(" ");
        for (int j = 0; j < 5; j++)
            printf("%.d ", arr[i][j]);
        printf("\n");
    }

    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值