資源限制
時間限制: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
300
130
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。輸出格式 輸出楊輝三角形的前...