***知識點:二維陣列下標的運用與楊輝三角的理解,
楊輝三角,是二項式系數在三角形中的一種幾何排列,在歐洲,這個表叫做帕斯卡三角形,帕斯卡(1623----1662)是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年,楊輝三角是中國古代數學的杰出研究成果之一,它把二項式系數圖形化,把組合數內在的一些代數性質直觀地從圖形中體現出來,是一種離散型的數與形的結合 ,
做這道題時首先我們要知道什么是楊輝三角,然后再來分析如何把對題理解轉換為代碼,而這題正好需要二維陣列,因此我們慢慢來分析,
引入資料
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
以上資料便是楊輝三角的另一種形式,因為這樣,才能讓大家更容易的找到規律并理解,
圖解

藍色線條表示指向,紅色線條表示左右兩數相加,
分析:
- 可以發現,每一列的元素都是 1 ,
- 每個數等于它上方兩數之和:從第二行第二列開始,就是元素 1,等于上兩個數的和(1+0),
- 第n行的數字有n項,(第一行只有元素 1 )
圖形分析完畢,引入二維陣列定義,
我們都知道,一維陣列元素的下標都是從0開始的,那么必然二維陣列的下標即是從【0】【0】開始,
根據圖解,圖形中元素0是不顯示出來的,但我們必須賦初值0給陣列,只有這樣,計算機才能得到一個初始值,進行后面的回圈累加,
int arr[10][10] = {0};
第一列的元素都為1,也就是每一行的第一個元素都是1,那么直接用回圈將其賦為1,
for (int i = 0; i < 10; i++)
arr[i][0] = 1;
接下來,進行回圈累加,我們知道,每個數等于上兩數之和,
那么在上面的圖解中,第二行第二列(2,2)的元素 1 {下標【1】【1】}等于第一行第一列(1,1)的元素 1{下標【0】【0】} 加第一行第二列(1,2){下標【0】【1】},
因此我們將這句話轉換為計算機語言:arr[1][1]=arr[0][0]+arr[0][1],
那么放到回圈中,便是下圖所示:
for (int i = 1; i < 10; i++)
for(int j=1;j<10;j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
代碼演示
#include<iostream>
using namespace std;
int main()
{
int arr[10][10] = {0};
for (int i = 0; i < 10; i++)
arr[i][0] = 1;
for (int i = 1; i < 10; i++)
for(int j=1;j<10;j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j <=i; j++)//因為我們不用輸出0,看圖得知每列的元素個數等于每行的元素個數,
//所以直接j小于等于i即可,
cout << arr[i][j]<<"\t";
cout << endl;
}
return 0;
}
運行結果

如果有同學還想輸出金字塔時的楊輝三角形,在這里我還是附上原始碼,供參考,有疑問可隨時提出,
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
const int n = 10;
const int m = 2 * n - 1;
int arr[n + 1][m] = { 0 };
for (int i = 0; i < n; i++)
{
arr[i][n - i - 1] = 1;
arr[i][n + i - 1] = 1;
}
for (int i = 2; i < n; i++)
{
for (int j = n - i + 1; j < n - 2 + i; j = j + 2)
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j + 1];
}
int p;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
cout << " ";
p = 1;
for (int j = n - i - 1; p < i + 2; j = j + 2)
{
cout << setw(4) << arr[i][j] << " ";
p = p + 1;
}
cout << endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236075.html
標籤:其他
上一篇:js高級 第二天 資料/變數/記憶體 記憶體圖 變數在記憶體中 變數的賦值 函式傳參 宣告全域變數的三種方式 回呼函式
下一篇:HTML簡要學習
