溫馨提示×

溫馨提示×

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

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

C語言如何打印楊輝三角形

發(fā)布時間:2022-02-08 09:12:08 來源:億速云 閱讀:178 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下C語言如何打印楊輝三角形,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    1. 題目描述

    楊輝三角形

    解題之前,我們先來了解一下楊輝三角形到底是什么?

    楊輝三角形,又稱帕斯卡三角形、賈憲三角形、海亞姆三角形,它的排列形如三角形。

    因為首現(xiàn)于南宋楊輝的《詳解九章算法》得名,而書中楊輝說明是引自賈憲的《釋鎖算書》,故又名賈憲三角形。

    古代波斯數(shù)學(xué)家歐瑪爾·海亞姆也描述過這個三角形。在歐洲,因為法國數(shù)學(xué)家布萊茲?帕斯卡在1653年的《論算術(shù)三角》中首次完整論述了這個三角形,故也被稱作帕斯卡三角(Pascal’s triangle)。

    楊輝三角的前10行寫出來如下

    C語言如何打印楊輝三角形

    2. 解題思路

    其實規(guī)律很簡單,我們來看一看

    在最上面一行的中央寫下數(shù)字 1;

    第二行,寫下兩個1,和上一行形成三角形;

    隨后的每一行,開頭和最后的數(shù)字都是1,其他的每個數(shù)都是它左上方和右上方的數(shù)之和,就是說除每行最左側(cè)與最右側(cè)的數(shù)字以外,每個數(shù)字等于它的左上方與右上方兩個數(shù)字之和。

    C語言如何打印楊輝三角形

    3. 動圖演示

    C語言如何打印楊輝三角形

    4. 代碼實現(xiàn)

    我們通過動圖可以得出以下結(jié)論

    1、兩邊都是數(shù)字1;

    2、從第三行開始,除了兩邊的數(shù)字1之外的數(shù)字都是由 “肩膀上” 的數(shù)字相加得到的。

    對于算法不太熟悉的朋友,如果直接去打印,可能就比較困難,所以我們不妨拆開幾步來做。

    Step1

    1、定義一個9行9列的二維整型數(shù)組;

    2、數(shù)組所有元素都賦值為1;

    3、輸出數(shù)組所有元素

    #include <stdio.h>
    
    int main()
    {
        //定義一個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;
    }

    我們輸出看一下

    C語言如何打印楊輝三角形

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

    C語言如何打印楊輝三角形

    所以對第二個for循環(huán)進(jìn)行修改,讓j <= i;

    #include <stdio.h>
    
    int main()
    {
        //定義一個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)行看一看

    C語言如何打印楊輝三角形

    Step2

    中間位置的數(shù)字是由它上一行對應(yīng)位置的數(shù)字以及上一行對應(yīng)位置左側(cè)的數(shù)字相加得到;

    因為下一行的情況總需要由上一行的情況推出,即我們需要記錄每一行的結(jié)果。

    所以構(gòu)建楊輝三角本質(zhì)上是一個動態(tài)規(guī)劃問題,我們可以總結(jié)出如下推導(dǎo)式:

    C語言如何打印楊輝三角形

    其中,dp[i][j]表示第i行的第j個數(shù)。

    #include <stdio.h>
    
    int main()
    {
        //定義一個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é)果

    C語言如何打印楊輝三角形

    居中顯示

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

    就像這樣

    C語言如何打印楊輝三角形

    很簡單,代碼如下

            for (int k = 0; k < 26 - (6 * i / 2); k++)
            {
                printf(" ");
            }

    這是什么意思呢?

    1、每行前輸出不等的空格;

    2、為何i / 2?因為:居中只需左邊加空格;

    3、為何要乘6?因為:輸出時用%6d;

    4、為何要用26減?因為:不大不小剛剛好????

    C語言如何打印楊輝三角形

    5. 完整代碼

    代碼示例

    #include <stdio.h>
    
    int main()
    {
        //定義一個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é)

    楊輝三角的美妙之處在于:它是如此足夠簡單,但本身在數(shù)學(xué)上卻擁有豐富的魅力。

    這是數(shù)學(xué)中的最令人稱奇的事物之一,隨便取諸多數(shù)學(xué)性質(zhì)中的某個,就能表明它是多么的精彩絕倫。

    比如:隱藏數(shù)列、完全平方數(shù)、斐波那契數(shù)列、謝爾賓斯基三角、組合數(shù)學(xué)、二項式定理等等,這些都都可以在楊輝三角形中找到,你發(fā)現(xiàn)了嗎?

    以上是“C語言如何打印楊輝三角形”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI