带你刷 · C语言 | 杨辉三角

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

在这里插入图片描述
啊我摔倒了..有没有人扶我起来学习....


@TOC


题目

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

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;
}

在这里插入图片描述

相关文章
|
8月前
|
算法 搜索推荐 程序员
C语言第十五练——输出第n位的斐波那契数
C语言第十五练——输出第n位的斐波那契数
71 0
|
11月前
|
搜索推荐 C语言 索引
ACAT2021纳新题目(C语言)
ACAT2021纳新题目(C语言)
43 0
|
11月前
|
搜索推荐 C语言
ACAT2021纳新题解(C语言)2
ACAT2021纳新题解(C语言)2
37 0
|
12月前
|
C语言
C语言之每日一题——杨氏矩阵
C语言之每日一题——杨氏矩阵
|
11月前
|
数据处理 C语言
【不高兴的津津】C语言17行代码解题
【不高兴的津津】C语言17行代码解题
112 0
|
11月前
|
C语言 索引
ACAT2021纳新题解(C语言)1
ACAT2021纳新题解(C语言)1
46 0
|
算法 C语言
C语言刷题系列——11.小乐乐与字符串
C语言刷题系列——11.小乐乐与字符串
78 0
|
存储 算法 C语言
【C语言蓝桥杯每日一题】——数字三角形
数字三角形🙌 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
107 0
【C语言蓝桥杯每日一题】——数字三角形
|
算法 C语言 C++
C语言每日一题】——杨氏矩阵
杨氏矩阵🙌 题目简述: 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求: 时间复杂度小于O(N);
103 0
|
算法 C语言 C++
【C语言蓝桥杯每日一题】——等差数列
这道题,我用到了C语言中的qsort库函数,它是一种基于快排算法思想的排序函数。首先,想让大家认识一下qsort库函数的大概样子,和如何使用。
131 0