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

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

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

题目

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

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

在这里插入图片描述

相关文章
|
分布式计算 网络协议 Java
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
430 0
微服务技术系列教程(20) - SpringCloud- 服务治理Eureka(替代方案)
|
存储 关系型数据库 MySQL
|
5月前
|
机器学习/深度学习 人工智能 监控
什么是信息化?什么是数字化?这两者有什么联系和区别?
本文探讨了信息化与数字化的概念、联系及区别。信息化是将线下业务流程线上化,提升效率;数字化则基于大数据和新技术优化企业运营模式,重构商业逻辑。两者层层递进,信息化为基础,数字化为升级。文中通过实例对比二者在理念、方法、数据应用等方面差异,并强调数字化转型需明确目标,借助低代码等工具实现能力重构,推动企业全价值链连通与效率提升。总结指出,真正的转型是能力的全面提升,而非单纯技术替换。
|
5月前
|
IDE 开发工具 双11
鸿蒙5开发宝藏案例分享---一多开发实例(长视频)
这篇文章深入解析了鸿蒙开发中的宝藏案例,特别是长视频应用的“一多开发”实例。它通过动态栅格布局、折叠屏优化和ArkUI响应式设计等技术,实现了手机、平板、PC等多种设备的一次开发适配。文中还提供了电商、新闻类应用的实际案例及代码解析,并总结了多端开发常见问题的避坑指南,如图片变形、交互冲突等解决方案。最后分享学习捷径,包括IDE模板、调试工具和官方社区资源,帮助开发者轻松掌握鸿蒙多设备开发技巧。
|
1月前
|
安全 网络性能优化 网络虚拟化
网络交换机分类与功能解析
接入交换机(ASW)连接终端设备,提供高密度端口与基础安全策略;二层交换机(LSW)基于MAC地址转发数据,构成局域网基础;汇聚交换机(DSW)聚合流量并实施VLAN路由、QoS等高级策略;核心交换机(CSW)作为网络骨干,具备高性能、高可靠性的高速转发能力;中间交换机(ISW)可指汇聚层设备或刀片服务器内交换模块。典型流量路径为:终端→ASW→DSW/ISW→CSW,分层架构提升网络扩展性与管理效率。(238字)
531 0
|
9月前
|
JavaScript Linux iOS开发
Motrix:Star46.4k,有了这个开源项目你的烦恼基本少了一半?一款开源功能全面的下载管理器,用上它妈妈再也不用担心下载速度啦~~~
嗨,大家好,我是小华同学。今天为大家介绍一款全能下载管理器——Motrix。它支持HTTP、FTP、BitTorrent等多种协议,拥有简洁易用的界面和强大的下载功能,包括选择性下载、多线程加速、自动更新Tracker列表等,适用于工作、学习和娱乐场景。欢迎关注我们,获取更多优质开源项目和高效工具。
477 15
Motrix:Star46.4k,有了这个开源项目你的烦恼基本少了一半?一款开源功能全面的下载管理器,用上它妈妈再也不用担心下载速度啦~~~
|
7月前
|
设计模式 网络协议 Java
04.里式替换原则介绍
里式替换原则(LSP)是面向对象设计的重要原则之一,确保子类可以无缝替换父类而不破坏程序功能。本文详细介绍了LSP的定义、背景、理解方法及应用场景,通过电商支付和鸟类飞行案例展示了如何遵循LSP,并分析了其优缺点。LSP强调子类应保持父类的行为一致性,有助于提高代码的可扩展性、可维护性和可重用性,但也可能导致过度设计。最后,对比了LSP与多态的区别,明确了LSP作为设计原则的重要性。
263 4
|
Oracle 关系型数据库 分布式数据库
PolarDB 数据备份与恢复策略
【8月更文第27天】PolarDB 是阿里云推出的一款高性能、高可用的关系型数据库服务,支持 MySQL、PostgreSQL 和 Oracle 数据库引擎。对于任何数据库系统来说,数据的安全性和完整性至关重要。本文将详细介绍 PolarDB 的备份机制,并提供数据恢复的最佳实践。
784 0
|
10月前
|
网络架构
Next14 页面与布局 使用
Next14 页面与布局 使用
194 7
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出深度学习:从理论到实践的探索之旅
在人工智能的璀璨星空中,深度学习如同一颗耀眼的新星,以其强大的数据处理能力引领着技术革新的浪潮。本文将带您走进深度学习的核心概念,揭示其背后的数学原理,并通过实际案例展示如何应用深度学习模型解决现实世界的问题。无论您是初学者还是有一定基础的开发者,这篇文章都将为您提供宝贵的知识和启发。
181 5