藍橋杯題解-楊輝三角形-BASIC-6
阿新 • • 發佈:2019-01-14
原題地址:楊輝三角形
問題描述
楊輝三角形又稱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
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。