亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何實現動態開辟存儲楊輝三角

發布時間:2022-03-10 16:36:31 來源:億速云 閱讀:155 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C語言如何實現動態開辟存儲楊輝三角”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C語言如何實現動態開辟存儲楊輝三角”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

問題引入

楊輝三角相必大家并不陌生,第1行有1列、第二行有2列…第n行有n列,且每行行首和行尾的值都為1,其余的值為上一行兩數相加

C語言如何實現動態開辟存儲楊輝三角

我們在C語言階段,第一次碰到的楊輝三角應該都是用常規的二維數組存儲,可以觀察到,用綠色填充的空間都是沒有被利用的。

存儲1行                   浪費0個

存儲2行                   浪費1個

存儲3行                   浪費3個 

存儲4行                   浪費6個

                .

                .

                .

存儲n行               浪費n*(n+1)/2-n個

C語言如何實現動態開辟存儲楊輝三角

解決方法

這樣極大浪費空間資源,今天我們就來試試動態開辟存儲楊輝三角,可以靈活的開辟空間,充分的利用空間。

思路分析

首先用指針pp維護動態開辟的int*類型的指針,再通過int*類型的指針去維護動態開辟的int型數據存儲楊輝三角

C語言如何實現動態開辟存儲楊輝三角

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++實現

用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語言如何實現動態開辟存儲楊輝三角”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

冷水江市| 右玉县| 左云县| 荣昌县| 宁都县| 新密市| 泰顺县| 平定县| 沁水县| 宾阳县| 舟山市| 历史| 丹巴县| 祁东县| 鄂托克前旗| 金山区| 岑巩县| 昌黎县| 邳州市| 南木林县| 政和县| 万盛区| 泾川县| 岫岩| 和顺县| 吕梁市| 盘锦市| 嫩江县| 襄城县| 荣昌县| 鹤壁市| 闸北区| 梅河口市| 依安县| 论坛| 呼图壁县| 莫力| 桑日县| 遂川县| 平谷区| 昌乐县|