C语言如何实现动态开辟存储杨辉三角
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本文小编为大家详细介绍"C语言如何实现动态开辟存储杨辉三角",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现动态开辟存储杨辉三角"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2024年11月23日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安全错误
数据库的锁怎样保障安全
深圳正规软件开发公司
海关冬奥会期间网络安全整治
杭州来啊网络技术成立时间
中国网络安全等级保护中心
执法通记录仪软件开发
云服务器是什么系统
电脑上的管家婆的数据库怎么查
黑客入侵计算机数据库
数据库方差怎么求
智能路灯项目数据库
辽宁推广网络技术有哪些
品铂pipo服务器怎么换系统
嘉兴数据网络技术
网络技术员最需要的工具
美国的网络安全部队
临沂服务器运维管理系统报价
管方收款码服务器断开是啥原因
吴江中专计算机网络技术学校
赣州智美互联网科技有限公
数据库怎么和网页链接
如何查看服务器显卡信息
怎么查看mdf数据库文件
七十年代数据库多久更新一次
数据库事务规定
阿里云数据库迁移
软件开发核心人员介绍
高级网络技术工程师考试
成都软件开发app定制
戴尔不支持app客户端和服务器
华为网络技术学的什么