【重生之学习C语言----杨辉三角篇】

目录

​编辑

--------------------------------------begin----------------------------------------

一、什么是杨辉三角?

二、问题分析

三、算法设计

使用二维数组存储杨辉三角:

递推关系:

格式化输出:

四、代码实现

 完整代码:

代码解析:

五、运行结果

六、关键问题与优化

为什么使用二维数组?

如何处理更大的行数?

优化空间复杂度:

七、总结

路过的佬们点点关注哦~

你们的鼓励是我前进的动力~

-------------------------------------end-------------------------------------------


--------------------------------------begin----------------------------------------

一、什么是杨辉三角?

杨辉三角(Pascal's Triangle)是二项式系数在三角形中的一种几何排列。它具有以下特点:

  1. 每行首尾为1

  2. 每个数是其左上方和右上方数之和

  3. 第n行有n个数

例如,前5行杨辉三角如下:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

二、问题分析

要实现杨辉三角的打印,需要解决以下问题:

  • 确定行数:用户输入或指定打印的行数。

  • 计算每行的值

    • 每行的第一个和最后一个数为1。

    • 中间的数等于上一行左上方和右上方的数之和。

  • 格式化输出:使杨辉三角居中显示。

三、算法设计

  1. 使用二维数组存储杨辉三角
    • 数组的行和列分别对应杨辉三角的行和列。

  2. 递推关系
    • 每行的第一个和最后一个数为1。

    • 其他数满足:a[i][j] = a[i-1][j-1] + a[i-1][j]

  3. 格式化输出
    • 使用空格对齐每行的数字。


四、代码实现

  •  完整代码:
#include <stdio.h>#define MAX_ROWS 20  // 定义最大行数void printPascalTriangle(int rows) {int triangle[MAX_ROWS][MAX_ROWS];// 填充杨辉三角for (int i = 0; i < rows; i++) {// 每行首尾为1triangle[i][0] = 1;triangle[i][i] = 1;// 计算中间的值for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];}}// 打印杨辉三角for (int i = 0; i < rows; i++) {// 打印前导空格,使三角形居中for (int space = 0; space < rows - i - 1; space++) {printf("  ");}// 打印当前行的数字for (int j = 0; j <= i; j++) {printf("%4d", triangle[i][j]);}printf("\n");}
}int main() {int rows;// 输入行数printf("请输入杨辉三角的行数(1-%d):", MAX_ROWS);scanf("%d", &rows);if (rows < 1 || rows > MAX_ROWS) {printf("输入的行数无效!\n");return 1;}// 打印杨辉三角printPascalTriangle(rows);return 0;
}
  • 代码解析:
  • printPascalTriangle函数

    • 填充杨辉三角

      • 使用二维数组 triangle 存储杨辉三角的值。

      • 每行的第一个和最后一个数为1。

      • 中间的数通过递推关系计算:triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j]

    • 打印杨辉三角

      • 使用前导空格使每行居中。

      • 使用 %4d 格式化输出,确保数字对齐。

  • main函数

    • 获取用户输入的行数。

    • 检查输入是否有效。

    • 调用 printPascalTriangle 函数打印杨辉三角。

五、运行结果

请输入杨辉三角的行数(1-20):511   11   2   11   3   3   1
1   4   6   4   1

六、关键问题与优化

  • 为什么使用二维数组
    • 二维数组可以直观地存储杨辉三角的每一行和每一列的值。

  • 如何处理更大的行数
    • 调整 MAX_ROWS 的值,但需注意内存限制。

  • 优化空间复杂度
    • 使用一维数组存储当前行和上一行,减少内存占用。

void printPascalTriangleOptimized(int rows) {int prev[MAX_ROWS], curr[MAX_ROWS];for (int i = 0; i < rows; i++) {curr[0] = 1;curr[i] = 1;for (int j = 1; j < i; j++) {curr[j] = prev[j-1] + prev[j];}// 打印当前行for (int space = 0; space < rows - i - 1; space++) {printf("  ");}for (int j = 0; j <= i; j++) {printf("%4d", curr[j]);}printf("\n");// 更新上一行for (int j = 0; j <= i; j++) {prev[j] = curr[j];}}
}

七、总结

通过本博客,你学会了:

  1. 杨辉三角的定义与数学原理。

  2. 递推关系的应用:如何通过上一行计算当前行的值。

  3. C语言实现技巧:二维数组、循环、格式化输出。

  4. 优化思路:如何减少内存占用。


动手挑战:尝试修改代码,打印出前10行杨辉三角,并在评论区分享你的结果!

路过的佬们点点关注哦~

你们的鼓励是我前进的动力~

-------------------------------------end-------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13258.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后&#xff0c;使用一行代码快速安装cpolar内网穿透工具&#xff0c;轻松实现随时随地远程访问本地内网中的绿联NAS&#xff0c;无需公网…

C语言-----数据结构从门到精通

1.数据结构基本概念 数据结构是计算机中存储、组织数据的方式&#xff0c;旨在提高数据的访问和操作效率。它是实现高效算法和程序设计的基石。 目标:通过思维导图了解数据结构的知识点,并掌握。 1.1逻辑结构 逻辑结构主要四种类型: 集合&#xff1a;结构中的数据元素之…

使用Pygame制作“打砖块”游戏

1. 前言 打砖块&#xff08;Breakout / Arkanoid&#xff09; 是一款经典街机游戏&#xff0c;玩家控制一个可左右移动的挡板&#xff0c;接住并反弹球&#xff0c;击碎屏幕上方的砖块。随着砖块被击碎&#xff0c;不仅能获得分数&#xff0c;还可以体验到不断加速或复杂的反弹…

Linux——基础命令1

$&#xff1a;普通用户 #&#xff1a;超级用户 cd 切换目录 cd 目录 &#xff08;进入目录&#xff09; cd ../ &#xff08;返回上一级目录&#xff09; cd ~ &#xff08;切换到当前用户的家目录&#xff09; cd - &#xff08;返回上次目录&#xff09; pwd 输出当前目录…

string类OJ练习题

目录 文章目录 前言 一、反转字符串 二、反转字符串 II 三、反转字符串中的单词 III 四、验证一个字符串是否是回文 五、字符串相加&#xff08;大数加法&#xff09; 六、字符串相乘&#xff08;大数乘法&#xff09; 七、把字符串转化为整数&#xff08;atoi&#xff09; 总结…

机器学习-线性回归(参数估计之结构风险最小化)

前面我们已经了解过关于机器学习中的结构风险最小化准则&#xff0c;包括L1 正则化&#xff08;Lasso&#xff09;、L2 正则化&#xff08;Ridge&#xff09;、Elastic Net&#xff0c;现在我们结合线性回归的场景&#xff0c;来了解一下线性回归的结构风险最小化&#xff0c;通…

PostgreSQL / PostGIS:创建地理要素

PostGIS详细教程可以参考官方文档&#xff1a;https://postgis.net/workshops/zh_Hans/postgis-intro/&#xff0c;并且官方文档提供了练习数据、教程、PPT版本教程。我这里参考QGIS文档中关于PostGIS的教程进行学习。 PostGIS 可以被认为是一组数据库内函数的集合&#xff0c…

Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)

WebFlux优缺点 【来源DeepSeek】 Spring WebFlux 是 Spring 框架提供的响应式编程模型&#xff0c;旨在支持非阻塞、异步和高并发的应用场景。其优缺点如下&#xff1a; 优点 高并发与低资源消耗 非阻塞 I/O&#xff1a;基于事件循环模型&#xff08;如 Netty&#xff09;&am…

C语言按位取反【~】详解,含原码反码补码的0基础讲解【原码反码补码严格意义上来说属于计算机组成原理的范畴,不过这也是学好编程初级阶段的必修课】

目录 概述【适合0基础看的简要描述】&#xff1a; 上述加粗下划线的内容提取版&#xff1a; 从上述概述中提取的核心知识点&#xff0c;需背诵&#xff1a; 整数【包含整数&#xff0c;负整数和0】的原码反码补码相互转换的过程图示&#xff1a; 过程详细刨析&#xff1a;…

专门记录台式电脑常见问题

1、蓝屏死机&#xff0c;检查内存硬盘和cpu 2、拆内存条&#xff0c;用橡皮擦金手指 3、放主板静电&#xff0c;扣主板电池 4、系统时间不正确&#xff0c;主板电池没电 5、开机键坏了 6、电脑主机的风扇转&#xff0c;正常通电运行&#xff0c;但显示器没信号。看键盘的num键&…

GB/T 44721-2024 与 L3 自动驾驶:自动驾驶新时代的基石与指引

1.前言 在智能网联汽车飞速发展的当下&#xff0c;自动驾驶技术成为了行业变革的核心驱动力。从最初的辅助驾驶功能&#xff0c;到如今不断迈向高度自动化的征程&#xff0c;每一步都凝聚着技术的创新与突破。而在这一进程中&#xff0c;标准的制定与完善对于自动驾驶技术的规…

[Python人工智能] 四十九.PyTorch入门 (4)利用基础模块构建神经网络并实现分类预测

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解PyTorch构建回归神经网络。这篇文章将介绍如何利用PyTorch构建神经网络实现分类预测,其是使用基础模块构建。前面我们的Python人工智能主要以TensorFlow和Keras为主,而现在最主流的深度学习框…

Unity扩展编辑器使用整理(一)

准备工作 在Unity工程中新建Editor文件夹存放编辑器脚本&#xff0c; Unity中其他的特殊文件夹可以参考官方文档链接&#xff0c;如下&#xff1a; Unity - 手册&#xff1a;保留文件夹名称参考 (unity3d.com) 一、菜单栏扩展 1.增加顶部菜单栏选项 使用MenuItem&#xff…

网络爬虫js逆向之某音乐平台案例

【注意&#xff01;&#xff01;&#xff01;】 前言&#xff1a; - 本章主要讲解某音乐平台的js逆向知识 - 使用关键字搜定位加密入口 - 通过多篇文章【文字案例】的形式系统化进行描述 - 本文章全文进行了脱敏处理 - 详细代码不进行展示&#xff0c;需要则私聊作者 爬虫js逆向…

腾讯云 TI 平台部署与调用DeepSeek-R1大模型的实战指南

今天我们将继续探讨如何部署一个私有化的 DeepSeek-R1 大模型&#xff0c;具体的部署过程我们将利用腾讯云的 TI 平台进行操作。当前&#xff0c;腾讯云 TI 平台为用户提供了免费体验的满血版 DeepSeek-R1 大模型&#xff0c;同时该平台还提供了开放的 API 接口服务&#xff0c…

Python自动化测试selenium指定截图文件名方法

这篇文章主要介绍了Python自动化测试selenium指定截图文件名方法&#xff0c;Selenium 支持 Web 浏览器的自动化&#xff0c;它提供一套测试函数&#xff0c;用于支持 Web 自动化测试&#xff0c;下文基于python实现指定截图文件名方法&#xff0c;需要的小伙伴可以参考一下 前…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中&#xff0c;向 addConstr 这个方法中传入一个 TempConstr 对象&#xff0c;在模型中就会根据这个对象生成一个约束。更重要的是&#xff1a;TempConstr 对象可以传给所有addConstr系列方法&#xff0c;所以下面先介绍 TempConstr 对象 TempConstr TempC…

Django框架丨从零开始的Django入门学习

Django 是一个用于构建 Web 应用程序的高级 Python Web 框架&#xff0c;Django是一个高度模块化的框架&#xff0c;使用 Django&#xff0c;只要很少的代码&#xff0c;Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容&#xff0c;并进一步开发出全功能…

Redis --- 秒杀优化方案(阻塞队列+基于Stream流的消息队列)

下面是我们的秒杀流程&#xff1a; 对于正常的秒杀处理&#xff0c;我们需要多次查询数据库&#xff0c;会给数据库造成相当大的压力&#xff0c;这个时候我们需要加入缓存&#xff0c;进而缓解数据库压力。 在上面的图示中&#xff0c;我们可以将一条流水线的任务拆成两条流水…

开源AI智能名片2 + 1链动模式S2B2C商城小程序:内容价值创造与传播新引擎

摘要&#xff1a;本文聚焦于信息爆炸时代下&#xff0c;内容价值的创造与传播。随着用户角色的转变&#xff0c;其在内容生产与传播中的价值日益凸显。同时&#xff0c;深入探讨开源AI智能名片2 1链动模式S2B2C商城小程序这一创新商业模式&#xff0c;如何借助用户创造内容并传…