1. 程式人生 > >藍橋杯題解-楊輝三角形-BASIC-6

藍橋杯題解-楊輝三角形-BASIC-6

原題地址:楊輝三角形

問題描述

楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的係數。
它的一個重要性質是:三角形中的每個數字等於它兩肩上的數字相加。
下面給出了楊輝三角形的前4行:

1 
1 1
1 2 1
1 3 3 1
給出n,輸出它的前n行。

輸入格式

輸入包含一個數n。

輸出格式

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

樣例輸入

4

樣例輸出

1
1 1
1 2 1
1 3 3 1

資料規模與約定

1 <= n <= 34。

解:

1.楊輝三角的數除了第一行,其他數等於它肩上兩數相加,若肩上的數有空白,那便預設為0,因此很容易想到可初始化為0的陣列。

2.在加上題目要求的輸出格式,假設要計算數在當前行是第i個,那麼i=前一行的第i-1個數+前一行的第i個數。且陣列位置是從0開始,為方便計算剛好可以不使用陣列第一個元素,只需將其初始化為0即可,這樣既方便從陣列下標為1的元素開始使用,也不用管當前數肩上的兩數若有一個為空的情況。

3.由資料規模可知最多輸出34行,再分析下每行輸出的個數,剛好等於行數(可用一個for巢狀另一個for

輸出每行的個數),結合第2點的分析,故申請陣列元素35個。

4.一個數組可以進行計算,但需要兩個中介點,且分析起來不直觀,也不好操作,所以我使用兩個陣列,分別儲存偶數和奇數行。

程式碼:

#include"iostream"
using namespace std;

int main()
{
	int n,a[35]={0,1},b[35]={0};//a儲存奇數行資料,b儲存偶數行資料
	cin>>n;
	for(int i=1;i<=n;i++)//輸出i行
		{
			for(int j=1;j<=i;j++)//輸出j個,也同時進行計算當前行資料
			{
				if
(i==1)//第一行單獨拿出來輸出 { cout<<1; break; } if(i%2==0)//偶行時 { b[j]=a[j]+a[j-1];//計算i行的資料 cout<<b[j]<<" ";//必須有空格間隔 } else//奇行時 { a[j]=b[j]+b[j-1]; cout<<a[j]<<" "; } } cout<<endl;//每行換行 } return 0; }

高亮程式碼片原來要用小寫c。

題解目錄