日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言打印楊輝三角形的示例代碼_C 語言

作者:飛向星的客機 ? 更新時間: 2022-04-12 編程語言

1. 題目描述

楊輝三角形

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

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

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

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

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

2. 解題思路

其實規律很簡單,我們來看一看

在最上面一行的中央寫下數字 1;

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

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

3. 動圖演示

4. 代碼實現

我們通過動圖可以得出以下結論

1、兩邊都是數字1;

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

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

Step1

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

2、數組所有元素都賦值為1;

3、輸出數組所有元素

#include <stdio.h>

int main()
{
    //定義一個9行9列的二維整型數組
    int data[9][9];

    int i = 0;
    int j = 0;

    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 9; j++)
        {
            //數組所有元素都賦值為1
            data[i][j] = 1;
        }
    }

    //輸出數組所有元素
    for (i = 0; i < 9; i++)
    {
         for (j = 0; j < 9; j++)
         {
             printf("%6d", data[i][j]);
         }
         printf("\n");
    }
    return 0;
}

我們輸出看一下

但是我們只需要左下角的數字

所以對第二個for循環進行修改,讓j <= i;

#include <stdio.h>

int main()
{
    //定義一個9行9列的二維整型數組
    int data[9][9];

    int i = 0;
    int j = 0;

    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 9; j++)
        {
            //數組所有元素都賦值為1
            data[i][j] = 1;
        }
    }

    //輸出數組所有元素
    for (i = 0; i < 9; i++)
    {
    	//修改j <= i
         for (j = 0; j <= i; j++)
         {
             printf("%6d", data[i][j]);
         }
         printf("\n");
    }
    return 0;
}

運行看一看

Step2

中間位置的數字是由它上一行對應位置的數字以及上一行對應位置左側的數字相加得到;

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

所以構建楊輝三角本質上是一個動態規劃問題,我們可以總結出如下推導式:

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

#include <stdio.h>

int main()
{
    //定義一個9行9列的二維整型數組
    int data[9][9];

    int i = 0;
    int j = 0;

    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 9; j++)
        {
            //數組所有元素都賦值為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];
        }
    }

    //輸出數組所有元素
    for (i = 0; i < 9; i++)
    {
         for (j = 0; j <= i; j++)
         {
             printf("%6d", data[i][j]);
         }
         printf("\n");
    }
    return 0;
}

運行結果

居中顯示

我們如何讓楊輝三角形居中顯示呢?

就像這樣

很簡單,代碼如下

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

這是什么意思呢?

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

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

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

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

5. 完整代碼

代碼示例

#include <stdio.h>

int main()
{
    //定義一個9行9列的二維整型數組
    int data[9][9];

    int i = 0;
    int j = 0;

    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 9; j++)
        {
            //數組所有元素都賦值為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];
        }
    }

    //輸出數組所有元素
    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. 特性總結

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

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

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

原文鏈接:https://blog.csdn.net/m0_63325890/article/details/122781323

欄目分類
最近更新