楊輝三角形
解題之前,我們先來了解一下楊輝三角形到底是什么?
楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形,它的排列形如三角形。
因為首現于南宋楊輝的《詳解九章算法》得名,而書中楊輝說明是引自賈憲的《釋鎖算書》,故又名賈憲三角形。
古代波斯數學家歐瑪爾·海亞姆也描述過這個三角形。在歐洲,因為法國數學家布萊茲?帕斯卡在1653年的《論算術三角》中首次完整論述了這個三角形,故也被稱作帕斯卡三角(Pascal’s triangle)。
楊輝三角的前10行寫出來如下
其實規律很簡單,我們來看一看
在最上面一行的中央寫下數字 1;
第二行,寫下兩個1,和上一行形成三角形;
隨后的每一行,開頭和最后的數字都是1,其他的每個數都是它左上方和右上方的數之和,就是說除每行最左側與最右側的數字以外,每個數字等于它的左上方與右上方兩個數字之和。
我們通過動圖可以得出以下結論
1、兩邊都是數字1;
2、從第三行開始,除了兩邊的數字1之外的數字都是由 “肩膀上” 的數字相加得到的。
對于算法不太熟悉的朋友,如果直接去打印,可能就比較困難,所以我們不妨拆開幾步來做。
1、定義一個9行9列的二維整型數組;
2、數組所有元素都賦值為1;
3、輸出數組所有元素
#include<stdio.h>intmain(){//定義一個9行9列的二維整型數組intdata[9][9];inti=0;intj=0;for(i=0;i<9;i++){for(j=0;j<9;j++){//數組所有元素都賦值為1data[i][j]=1;}}//輸出數組所有元素for(i=0;i<9;i++){for(j=0;j<9;j++){printf("%6d",data[i][j]);}printf("\n");}return0;}
我們輸出看一下
但是我們只需要左下角的數字
所以對第二個for循環進行修改,讓j <= i;
#include<stdio.h>intmain(){//定義一個9行9列的二維整型數組intdata[9][9];inti=0;intj=0;for(i=0;i<9;i++){for(j=0;j<9;j++){//數組所有元素都賦值為1data[i][j]=1;}}//輸出數組所有元素for(i=0;i<9;i++){//修改j<=ifor(j=0;j<=i;j++){printf("%6d",data[i][j]);}printf("\n");}return0;}
運行看一看
中間位置的數字是由它上一行對應位置的數字以及上一行對應位置左側的數字相加得到;
因為下一行的情況總需要由上一行的情況推出,即我們需要記錄每一行的結果。
所以構建楊輝三角本質上是一個動態規劃問題,我們可以總結出如下推導式:
其中,dp[i][j]表示第i行的第j個數。
#include<stdio.h>intmain(){//定義一個9行9列的二維整型數組intdata[9][9];inti=0;intj=0;for(i=0;i<9;i++){for(j=0;j<9;j++){//數組所有元素都賦值為1data[i][j]=1;}}//dpfor(i=1;i<9;i++){for(j=1;j<i;j++){data[i][j]=data[i-1][j]+data[i-1][j-1];}}//輸出數組所有元素for(i=0;i<9;i++){for(j=0;j<=i;j++){printf("%6d",data[i][j]);}printf("\n");}return0;}
運行結果
我們如何讓楊輝三角形居中顯示呢?
就像這樣
很簡單,代碼如下
for(intk=0;k<26-(6*i/2);k++){printf("");}
這是什么意思呢?
1、每行前輸出不等的空格;
2、為何i / 2?因為:居中只需左邊加空格;
3、為何要乘6?因為:輸出時用%6d;
4、為何要用26減?因為:不大不小剛剛好????
代碼示例
#include<stdio.h>intmain(){//定義一個9行9列的二維整型數組intdata[9][9];inti=0;intj=0;for(i=0;i<9;i++){for(j=0;j<9;j++){//數組所有元素都賦值為1data[i][j]=1;}}//dpfor(i=1;i<9;i++){for(j=1;j<i;j++){data[i][j]=data[i-1][j]+data[i-1][j-1];}}//輸出數組所有元素for(i=0;i<9;i++){//用三角形的方式打印for(intk=0;k<26-(6*i/2);k++){printf("");}for(j=0;j<=i;j++){printf("%6d",data[i][j]);}printf("\n");}return0;}
楊輝三角的美妙之處在于:它是如此足夠簡單,但本身在數學上卻擁有豐富的魅力。
這是數學中的最令人稱奇的事物之一,隨便取諸多數學性質中的某個,就能表明它是多么的精彩絕倫。
比如:隱藏數列、完全平方數、斐波那契數列、謝爾賓斯基三角、組合數學、二項式定理等等,這些都都可以在楊輝三角形中找到,你發現了嗎?
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖片)提起怎么上傳音樂大家在熟悉不過了,被越來越多的人所熟知,那你知道怎么上傳音樂嗎?快和小編一起去了解一下吧!1、第一步在我們的手機里面打開音樂軟件,進去聽歌的界面,點擊右上方的列圖標。2、打開側邊欄界面之后,點擊個人頭像進入個人頁面。3、進去個人主頁界面之后,點擊右上方的賬號設置。4、進去個人信息界面之后,點擊上傳音樂作品。進去上傳音樂作品界面之后,點擊上傳作品。進去上傳音樂作品的詳情界...
根據國家網貸的規定,捷信是屬于高利貸,對于超過國家規定的貸款利率部分是需要退還給用戶的,那么捷信退利息是在哪里退?捷信辦理退息是需要通過關注“聚投訴”微信公眾號,按照公眾號的提示進行操作并提交好有關貸款的證明資料之后,就會有捷信官方工作人員聯系用戶辦理退息手續。需要注意的是,捷信退息退還的只是超出國家規定范圍內的利息。捷信怎么退利息流程【1】首先借款人要準備借款證明、利息證...
中南銀行現在是什么銀行?中南銀行的前身是中銀香港,現在是什么銀行?現在稱為中銀香港,是一家華僑創辦的銀行。1921年中南銀行是黃奕先生與胡筆江、史量才共同創立的,總部位于上海漢口路110號。“中南”字,取自中國和南洋之間的聯系。中南銀行作為中國近代最大的發行銀行,在中國具有重要的歷史地位。這是近代海外華人在國外投資設立的最大的一家銀行,同時也是華人在國外的最大的一家公司。1...