C语言如何实现动态开辟存储杨辉三角
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本文小编为大家详细介绍"C语言如何实现动态开辟存储杨辉三角",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现动态开辟存储杨辉三角"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
软件开发买
公司云服务器怎么管理
云计算对服务器行业有冲突吗
嵌入式测试数据库测试
网络安全负责人职责 网安法
当代大学生如何学习网络安全
软件开发 接口设计
上海微领软件开发怎么样
进博会期间网络安全应急预案
计算机网络安全结构
谷歌服务器可以升级吗
网络安全大赛南昌
win10下卸载数据库
剑灵传说区服务器
网络安全应急响应服务项目
数据库推广的软件
1201服务器
阿哲网络安全大使
地下城不上服务器
武汉众乐互娱网络技术有限公司
mysql 数据库权限
创建链接服务器
怎么备份数据库exp
在数据库视图中添加列
数据库在本地安装端口怎么查看
iwms 数据库
大连星玛电梯服务器程序
博客服务器怎么弄
云服务器安全管理办法
怎么构建java代码到服务器