C語(yǔ)言打印楊輝三角形的示例代碼
1. 題目描述
楊輝三角形
解題之前,我們先來(lái)了解一下楊輝三角形到底是什么?
楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形,它的排列形如三角形。
因?yàn)槭赚F(xiàn)于南宋楊輝的《詳解九章算法》得名,而書(shū)中楊輝說(shuō)明是引自賈憲的《釋鎖算書(shū)》,故又名賈憲三角形。
古代波斯數(shù)學(xué)家歐瑪爾·海亞姆也描述過(guò)這個(gè)三角形。在歐洲,因?yàn)榉▏?guó)數(shù)學(xué)家布萊茲?帕斯卡在1653年的《論算術(shù)三角》中首次完整論述了這個(gè)三角形,故也被稱作帕斯卡三角(Pascal’s triangle)。
楊輝三角的前10行寫(xiě)出來(lái)如下

2. 解題思路
其實(shí)規(guī)律很簡(jiǎn)單,我們來(lái)看一看
在最上面一行的中央寫(xiě)下數(shù)字 1;
第二行,寫(xiě)下兩個(gè)1,和上一行形成三角形;
隨后的每一行,開(kāi)頭和最后的數(shù)字都是1,其他的每個(gè)數(shù)都是它左上方和右上方的數(shù)之和,就是說(shuō)除每行最左側(cè)與最右側(cè)的數(shù)字以外,每個(gè)數(shù)字等于它的左上方與右上方兩個(gè)數(shù)字之和。

3. 動(dòng)圖演示

4. 代碼實(shí)現(xiàn)
我們通過(guò)動(dòng)圖可以得出以下結(jié)論
1、兩邊都是數(shù)字1;
2、從第三行開(kāi)始,除了兩邊的數(shù)字1之外的數(shù)字都是由 “肩膀上” 的數(shù)字相加得到的。
對(duì)于算法不太熟悉的朋友,如果直接去打印,可能就比較困難,所以我們不妨拆開(kāi)幾步來(lái)做。
Step1
1、定義一個(gè)9行9列的二維整型數(shù)組;
2、數(shù)組所有元素都賦值為1;
3、輸出數(shù)組所有元素
#include <stdio.h>
int main()
{
//定義一個(gè)9行9列的二維整型數(shù)組
int data[9][9];
int i = 0;
int j = 0;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
//數(shù)組所有元素都賦值為1
data[i][j] = 1;
}
}
//輸出數(shù)組所有元素
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
printf("%6d", data[i][j]);
}
printf("\n");
}
return 0;
}
我們輸出看一下

但是我們只需要左下角的數(shù)字

所以對(duì)第二個(gè)for循環(huán)進(jìn)行修改,讓j <= i;
#include <stdio.h>
int main()
{
//定義一個(gè)9行9列的二維整型數(shù)組
int data[9][9];
int i = 0;
int j = 0;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
//數(shù)組所有元素都賦值為1
data[i][j] = 1;
}
}
//輸出數(shù)組所有元素
for (i = 0; i < 9; i++)
{
//修改j <= i
for (j = 0; j <= i; j++)
{
printf("%6d", data[i][j]);
}
printf("\n");
}
return 0;
}
運(yùn)行看一看

Step2
中間位置的數(shù)字是由它上一行對(duì)應(yīng)位置的數(shù)字以及上一行對(duì)應(yīng)位置左側(cè)的數(shù)字相加得到;
因?yàn)橄乱恍械那闆r總需要由上一行的情況推出,即我們需要記錄每一行的結(jié)果。
所以構(gòu)建楊輝三角本質(zhì)上是一個(gè)動(dòng)態(tài)規(guī)劃問(wèn)題,我們可以總結(jié)出如下推導(dǎo)式:

其中,dp[i][j]表示第i行的第j個(gè)數(shù)。
#include <stdio.h>
int main()
{
//定義一個(gè)9行9列的二維整型數(shù)組
int data[9][9];
int i = 0;
int j = 0;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
//數(shù)組所有元素都賦值為1
data[i][j] = 1;
}
}
//dp
for (i = 1; i < 9; i++)
{
for (j = 1; j < i; j++)
{
data[i][j] = data[i-1][j] + data[i-1][j-1];
}
}
//輸出數(shù)組所有元素
for (i = 0; i < 9; i++)
{
for (j = 0; j <= i; j++)
{
printf("%6d", data[i][j]);
}
printf("\n");
}
return 0;
}
運(yùn)行結(jié)果

居中顯示
我們?nèi)绾巫寳钶x三角形居中顯示呢?
就像這樣

很簡(jiǎn)單,代碼如下
for (int k = 0; k < 26 - (6 * i / 2); k++)
{
printf(" ");
}
這是什么意思呢?
1、每行前輸出不等的空格;
2、為何i / 2?因?yàn)椋壕又兄恍枳筮吋涌崭瘢?/p>
3、為何要乘6?因?yàn)椋狠敵鰰r(shí)用%6d;
4、為何要用26減?因?yàn)椋翰淮蟛恍倓偤??

5. 完整代碼
代碼示例
#include <stdio.h>
int main()
{
//定義一個(gè)9行9列的二維整型數(shù)組
int data[9][9];
int i = 0;
int j = 0;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
//數(shù)組所有元素都賦值為1
data[i][j] = 1;
}
}
//dp
for (i = 1; i < 9; i++)
{
for (j = 1; j < i; j++)
{
data[i][j] = data[i - 1][j] + data[i - 1][j - 1];
}
}
//輸出數(shù)組所有元素
for (i = 0; i < 9; i++)
{
//用三角形的方式打印
for (int k = 0; k < 26 - (6 * i / 2); k++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("%6d", data[i][j]);
}
printf("\n");
}
return 0;
}
6. 特性總結(jié)
楊輝三角的美妙之處在于:它是如此足夠簡(jiǎn)單,但本身在數(shù)學(xué)上卻擁有豐富的魅力。
這是數(shù)學(xué)中的最令人稱奇的事物之一,隨便取諸多數(shù)學(xué)性質(zhì)中的某個(gè),就能表明它是多么的精彩絕倫。
比如:隱藏?cái)?shù)列、完全平方數(shù)、斐波那契數(shù)列、謝爾賓斯基三角、組合數(shù)學(xué)、二項(xiàng)式定理等等,這些都都可以在楊輝三角形中找到,你發(fā)現(xiàn)了嗎?
到此這篇關(guān)于C語(yǔ)言打印楊輝三角形的示例代碼的文章就介紹到這了,更多相關(guān)C語(yǔ)言楊輝三角形內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[七]
C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[七]...2007-02-02
C語(yǔ)言實(shí)現(xiàn)賓館管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)賓館管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
詳解C語(yǔ)言中結(jié)構(gòu)體的自引用和相互引用
這篇文章主要介紹了C語(yǔ)言中結(jié)構(gòu)體的自引用和相互引用,詳細(xì)解析了結(jié)構(gòu)體中指針的指向情況,需要的朋友可以參考下2016-04-04
VS2019創(chuàng)建C++工程的的實(shí)現(xiàn)步驟
本文主要介紹了VS2019創(chuàng)建C++工程步驟,包含新建項(xiàng)目、編輯文件、配置源文件目錄、編譯鏈接、輸出文件、設(shè)置斷點(diǎn)調(diào)試,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
減少C++代碼編譯時(shí)間的簡(jiǎn)單方法(必看篇)
下面小編就為大家?guī)?lái)一篇減少C++代碼編譯時(shí)間的簡(jiǎn)單方法(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
詳解C++編程中表達(dá)式的語(yǔ)義與計(jì)算順序
這篇文章主要介紹了C++編程中表達(dá)式的語(yǔ)義與計(jì)算順序,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01
C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)易通訊錄
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)易通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07

