C语言如何实现动态开辟存储杨辉三角
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,本文小编为大家详细介绍"C语言如何实现动态开辟存储杨辉三角",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现动态开辟存储杨辉三角"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2024年11月27日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安全错误
数据库的锁怎样保障安全
支付的软件开发费如何做账
警车监控系统软件开发
嘉定区网络营销网络技术备案
c 数据库日志
运城职业技术学院计算机网络技术
幼儿园网络安全手抄报最简单
广东智通网络技术有限公司
网络安全方向就业
计算机软件开发小组
学校寒假期间网络安全保障总结
xsite数据库
耕地面积软件开发制作协议
免费网络技术教程网
有源代码怎么搞数据库
江苏微型软件开发
网络安全的影响包含哪几方面
网络技术能申请专利吗
生存服务器可以加模组吗
数据库安全技术方案
美团外卖服务器的设置
售后服务好的软件开发外包
江苏时间频率同步服务器
网络安全靶场 贵阳
湖南安防卫星授时服务器云服务器
数据库有用户名和密码可以共享吗
山东正规软件开发机构
数据库安全有哪些证书
有源代码怎么搞数据库
数据库应用技术张蒲生
java网络安全系统