C 藍橋杯 基礎練習之楊輝三角形

2021-10-03 08:17:28 字數 2157 閱讀 9732

資源限制

時間限制:1.0 s 記憶體限制:256.0 mb

問題描述

楊輝三角形又稱pascal三角形,它的第i+1行是(a+b)i的展開式的係數。

它的乙個重要性質是:三角形中的每個數字等於它兩肩上的數字相加。

下面給出了楊輝三角形的前4行:

1 11 2 1

1 3 3 1

給出n,輸出它的前n行。

輸入格式

輸入包含乙個數n。

輸出格式

輸出楊輝三角形的前n行。每一行從這一行的第乙個數開始依次輸出,中間使用乙個空格分隔。請不要在前面輸出多餘的空格。

樣例輸入

樣例輸出1

1 11 2 1

1 3 3 1

資料規模與約定

1 <= n <= 34

思路方案一: 一維陣列+一維輔助陣列

我使用的是乙個長度為n+2的輔助陣列,第0位為0,記錄更新陣列的值,輸出完之後,實際陣列再與其保持一致,不斷更新,拿樣例說明吧。

[ 01

0000

0110

0001

2100

0133

10

](1)

\begin 0 &1 &0 &0 &0 &0 \\ 0 &1 &1 &0 &0 &0 \\ 0 &1 &2 &1 &0 &0 \\ 0 &1 &3 &3 &1 &0 \\ \end \tag

⎣⎢⎢⎡​0

000​

1111

​012

3​00

13​0

001​

0000

​⎦⎥⎥

⎤​(1

) 如上面的矩陣所示,每一次的更新都是基於上一行矩陣的值,更新 j=1

–>j=

ij = 1 –> j=i

j=1–

>j=

i 標準滿足 f(n

)=f(

n)+f

(n−1

)f(n)=f(n)+f(n-1)

f(n)=f

(n)+

f(n−

1),所以引用了輔助陣列。這部分的我看到了網上乙個博主並沒有使用額外空間,而是從

j =i

−>j=

1j = i->j=1

j=i−

>j=

1,這樣就避免了計算更新值,因為前乙個值的改變而帶來的麻煩,就不需要輔助陣列了。

方案二:二維陣列

思路的話和上面的差不多,不過使用二維陣列就沒有必要引用輔助陣列了,因為二維的話可以直接參考上一行矩陣,如上述公式所示。

**-c++

方案一:一維陣列

#include

using

namespace std;

intmain()

lst[1]

=1; res[1]

=1;for

(int i=

1;i<=n;i++

) cout

int k=

1;k<=i;k++)}

return0;

}

優化後的**

#include

using

namespace std;

intmain()

lst[1]

=1; res[1]

=1;for

(int i=

1;i<=n;i++

) cout<}return0;

}

方案二: 二維陣列
#include

#include

using

namespace std;

//二維陣列

intmain()

}//這裡懶了,輸出時候直接單獨寫了,直接遍歷二維陣列

for(

int i=

0;i) cout<}return0;

}

檢討一下

藍橋杯 基礎練習 楊輝三角形

基礎練習 楊輝三角形 時間限制 1.0s 記憶體限制 256.0mb 問題描述 楊輝三角形又稱pascal三角形,它的第i 1行是 a b i的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 11 1 1 2 1 1 3 3 1 給出n,輸出...

藍橋杯基礎練習楊輝三角形

問題描述 楊輝三角形又稱pascal三角形,它的第i 1行是 a b i的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 1 11 2 1 1 3 3 1 給出n,輸出它的前n行。輸入格式 輸入包含乙個數n。輸出格式 輸出楊輝三角形的前n行。...

藍橋杯基礎練習 楊輝三角形

問題描述 楊輝三角形又稱pascal三角形,它的第i 1行是 a b i的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 1 1 1 1 2 1 1 3 3 1 給出n,輸出它的前n行。輸入格式 輸入包含乙個數n。輸出格式 輸出楊輝三角形的前...