C语言如何实现动态开辟存储杨辉三角
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文小编为大家详细介绍"C语言如何实现动态开辟存储杨辉三角",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现动态开辟存储杨辉三角"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2025年11月07日C语言如何实现动态开辟存储杨辉三角
本文小编为大家详细介绍"C语言如何实现动态开辟存储杨辉三角",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现动态开辟存储杨辉三角"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
问题引入
杨辉三角相必大家并不陌生,第1行有1列、第二行有2列…第n行有n列,且每行行首和行尾的值都为1,其余的值为上一行两数相加
我们在C语言阶段,第一次碰到的杨辉三角应该都是用常规的二维数组存储,可以观察到,用绿色填充的空间都是没有被利用的。
存储1行 浪费0个
存储2行 浪费1个
存储3行 浪费3个
存储4行 浪费6个
.
.
.
存储n行 浪费n*(n+1)/2-n个

解决方法
这样极大浪费空间资源,今天我们就来试试动态开辟存储杨辉三角,可以灵活的开辟空间,充分的利用空间。
思路分析
首先用指针pp维护动态开辟的int*类型的指针,再通过int*类型的指针去维护动态开辟的int型数据存储杨辉三角

C代码实现
#include#include void PrintFree(int** pp, int numrows){ //打印 for (int i = 0; i < numrows; i++) { for (int k = 0; k < numrows - i; k++) { printf(" "); } for (int j = 0; j <= i; j++) { printf("%4d", pp[i][j]); //可以根据打印的行数适当调整右对齐 printf(" "); } printf("\n"); }} //清理malloc出来的空间 for (int i = 0; i < numrows; i++) { free(pp[i]); pp[i] = NULL; }}int main(){ //杨辉三角的行数 int numrows; scanf("%d", &numrows); //开辟numrows个int*类型的指针用来维护int型的数据 int** pp = (int**)malloc(sizeof(int*) * numrows); for (int i = 0; i < numrows; i++) { //int型数据个数随着行数的增加而增加 pp[i] = (int*)malloc(sizeof(int) * (i + 1)); } for (int i = 0; i < numrows; i++) { for (int j = 0; j <= i; j++) { //每行的行首和行尾都是1 if (j == 0 || i == j) { pp[i][j] = 1; // 等价于 *(*(pp+i)+j) } //其余的就是上一行的两个数据相加 else { pp[i][j] = pp[i - 1][j - 1] + pp[i - 1][j]; } } } PrintFree(pp, numrows); return 0;}
大家可以根据需要打印的行数大小在上面的打印函数适当调整
C++实现
用C++就非常方便了,STL中的vector就可以很方便的解决
#include#include using namespace std;//打印函数void Print(vector > vv, int numrows){ for (int i = 0; i < numrows; i++) { for (int j = 0; j <= i; j++) { cout << vv[i][j] << " "; } cout << endl; }}int main(){ int numrows; cin >> numrows; vector > vv; for (int i = 0; i < numrows; i++) { //每次开i+1个vector vv.resize(i + 1); //每次开i+1个int vv[i].resize(i + 1); } for (int i = 0; i < numrows; i++) { for (int j = 0; j <= i; j++) { if (j == 0 || i == j) { vv[i][j] = 1; } else { vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j]; } } } Print(vv, numrows); return 0;}
读到这里,这篇"C语言如何实现动态开辟存储杨辉三角"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
存储
杨辉三角
杨辉
三角
动态
空间
语言
指针
数据
j++
文章
类型
适当
一行
内容
函数
思路
C++
调整
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
浩鲸科技是互联网吗
数据库data有几个字节
迅腾国际软件开发工程师
保山哪有软件开发定制
甲骨文数据库怎么连接
黑龙江级差制软件开发公司
隶书下载软件开发
如何在桌面添加局域网服务器
电子商务网络安全应用
数据运营能接触到数据库吗
如何防止软件开发的坑
软件开发论文研究方法
服务器电源行业分析报告
漳平应用软件开发企业
奉贤区真实软件开发市场
公司是否需要招聘网络安全专业
惠普服务器是国产的吗
数据库别人可以连接吗
我的世界最mc服务器
网络安全法让我们生活更美好作文
2020年网络技术热点
Java服务器端文件管理
谷歌超级数据库
嘉欣网络技术有限公司招聘
什么软件开发界面最漂亮
昆山运营网络技术优势
吉林网络技术咨询报价
商鹰互联网科技
数据库系统自动化
对数据库技术的掌握