iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现动态开辟存储杨辉三角
  • 626
分享到

C语言实现动态开辟存储杨辉三角

2024-04-02 19:04:59 626人浏览 八月长安
摘要

目录问题引入解决方法思路分析C代码实现c++实现问题引入 杨辉三角相必大家并不陌生,第1行有1列、第二行有2列…第n行有n列,且每行行首和行尾的值都为1,其余的值为上一

问题引入

杨辉三角相必大家并不陌生,第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 <stdio.h>
#include <stdlib.h>

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 <iOStream>
#include <vector>
using namespace std;

//打印函数
void Print(vector<vector<int>> 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<vector<int>> vv;
	for (int i = 0; i < numrows; i++)
	{	
		//每次开i+1个vector<int>
		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语言实现动态开辟存储杨辉三角的文章就介绍到这了,更多相关C语言杨辉三角内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言实现动态开辟存储杨辉三角

本文链接: https://www.lsjlt.com/news/142065.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现动态开辟存储杨辉三角
    目录问题引入解决方法思路分析C代码实现C++实现问题引入 杨辉三角相必大家并不陌生,第1行有1列、第二行有2列…第n行有n列,且每行行首和行尾的值都为1,其余的值为上一...
    99+
    2024-04-02
  • C语言如何实现动态开辟存储杨辉三角
    本文小编为大家详细介绍“C语言如何实现动态开辟存储杨辉三角”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现动态开辟存储杨辉三角”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。问题引入杨辉三角相必大家并...
    99+
    2023-06-29
  • C语言怎么实现杨辉三角
    本篇内容介绍了“C语言怎么实现杨辉三角”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!杨辉三角——C语言实现杨辉三角:在屏幕上打印杨辉三角。1...
    99+
    2023-06-22
  • Java语言实现杨辉三角
    一.提出问题。 使用二维数组打印出如下图的杨辉三角。 二.分析问题。 1.首先想要输出杨辉三角,就要找到它有什么规律? ①第n行有n个数字; ②每一行开始和结束的数字都为1; ③每一个数字都等于它的...
    99+
    2023-10-08
    java
  • C++实现LeetCode(118.杨辉三角)
    [LeetCode] 118.Pascal's Triangle 杨辉三角 Given a non-negative integer numRows, generate t...
    99+
    2024-04-02
  • C语言如何实现打印杨辉三角
    这篇文章给大家分享的是有关C语言如何实现打印杨辉三角的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。题目描述打印杨辉三角(前N行)问题分析杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在...
    99+
    2023-06-22
  • C语言杨辉三角两种实现方法
    目录杨辉三角——C语言实现方法一:利用二维数组实现方法二(对方法一的改进): 总结杨辉三角——C语言实现 杨辉三角: 在屏幕上打印杨辉三角。 1 1 1 1 2 1 1 3 3 1...
    99+
    2024-04-02
  • C语言中杨氏矩阵与杨辉三角的实现方法
    一、杨氏矩阵 杨氏矩阵 1.杨氏矩阵的概念 在数学中,杨表(英语:Young tableau),又称杨氏矩阵。是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述...
    99+
    2024-04-02
  • C语言如何打印杨辉三角形
    小编给大家分享一下C语言如何打印杨辉三角形,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 题目描述杨辉三角形解题之前,我们先来了解一下杨辉三角形到底是什么?杨...
    99+
    2023-06-29
  • C++实现LeetCode(119.杨辉三角之二)
    [LeetCode] 119. Pascal's Triangle II 杨辉三角之二 Given a non-negative index k whe...
    99+
    2024-04-02
  • 怎么在C语言中实现一个杨氏矩阵与杨辉三角
    这篇文章将为大家详细讲解有关怎么在C语言中实现一个杨氏矩阵与杨辉三角,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层...
    99+
    2023-06-15
  • C语言打印杨辉三角形的示例代码
    目录1. 题目描述2. 解题思路3. 动图演示4. 代码实现Step1Step2居中显示5. 完整代码6. 特性总结1. 题目描述 杨辉三角形 解题之前,我们先来了解一下杨辉三角形到...
    99+
    2024-04-02
  • C语言实现打印杨辉三角的方法详细(三种方法)
    目录题目描述问题分析1. 使用数组法(打印直角三角)2. 使用数组法(打印等腰三角)3. 使用公式法(打印等腰三角)网上参考题目描述 打印杨辉三角(前N行) 问题分析 杨辉三角是中国...
    99+
    2024-04-02
  • C语言动态开辟内存详解
    目录1.动态内存管理2.动态开辟内存函数的介绍2.1malloc和free函数2.2calloc函数2.3relloc函数总结1.动态内存管理 我们已经掌握的内存开辟方法,用的最多的...
    99+
    2024-04-02
  • 使用c语言如何输出一个杨辉三角形
    本文章向大家介绍使用c语言如何输出一个杨辉三角形,主要包括使用c语言如何输出一个杨辉三角形的使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。C语言是什么C语言是一门面向过程的、抽象化的通用程序设...
    99+
    2023-06-06
  • C语言编程动态内存开辟实现升级版通讯录教程示例
    目录前言一、存放联系人信息二、通讯录初始化三、增加联系人四、销毁通讯录后记前言 所谓动态内存开辟的通讯录,就是我需要多少联系人,就给多少联系人,防止给定一个联系人上限,需要增加联系人...
    99+
    2024-04-02
  • C语言动态内存开辟常见问题解决与分析流程
    目录前言一、动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间的越界访问3.使用free释放非动态开辟的空间4.使用free释放动态内存中的一部分5.对同一块动态内存动态开...
    99+
    2024-04-02
  • C语言动态内存管理的实现
    目录1. 摘要2. 为什么存在动态内存管理3. 动态内存函数3.1 malloc3.2 free3.3 calloc3.4 realloc4. 常见的动态内存错误5. 几个经典笔试题...
    99+
    2024-04-02
  • C语言实现输出各种三角形
    目录C输出各种三角形C输出各种三角形 for(i=0;i<n;i++) { for(j=0;j<=i;j++) prin...
    99+
    2022-12-08
    C语言输出三角形 C语言三角形 C语言三角形输出
  • C语言如何实现动态内存分配
    今天小编给大家分享一下C语言如何实现动态内存分配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C语言动态内存分配的详解1.为...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作