楊輝三角形

2021-06-20 04:22:13 字數 1994 閱讀 1002

關於楊輝三角的論述

問題描述

楊輝三角形又稱pascal

三角形,它的第

i+1行是

(a+b)i

的展開式的係數。

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

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

1 11 2 1

1 3 3 1

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

輸入格式

輸入包含乙個數n。

輸出格式

輸出楊輝三角形的前n

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

樣例輸入

樣例輸出

1 11 2 1

1 3 3 1

資料規模與約定

1 <= n <= 34。

演算法分析:

楊輝三角的第i

行資料為(

a+b)^(i+1)

的係數;

故要想輸出楊輝三角形,只需輸出二項式的係數即可,其難點在於求組合數c(n,m)

的值;

以下是求解組合數c(n,m)

的值的方法;

第一種方法:利用遞迴求解(缺點,當n

值大時,需耗費大量時間)

演算法如下:

int fin(int n,int m)

if(m==n)

return  1;

if(m==0)

return  1;

return  fin(n-1,m)+fin(n-1,m-1);

第二種方法:利用公式求解:

缺點:當n

值較大時,超出了

int的表示範圍

即階乘無法表示

第三種方法:同樣是是利用上述公式,同時結合公式c(n,m)=c(n,n-m);

只不過是在求m*

(m-1

)*............*(m-n+1)

的過程中,去除以(

m-n)、(

m-n-1

).............(1);

這樣可以避免求解過程中值過大,而無法表示的情況!

缺點:當n

值過大時,該值仍然無法表示;

演算法描述:

int c(int n,int k)

__int64 i,j,h,sum;

__int64 a[100];

for(i=n,j=1;i>n-k;i--,j++){

a[j]=i;

sum=1,h=1;

for(i=1;isum=sum*a[i];

while(sum%h==0&&h<=k){

sum=sum/h;

h++;

return sum;

楊輝三角形**實現:

#include

int main()

int c(int n,int k);

int i,n,k,j;

scanf("%d",&n);

printf("1\n");

for(i=1;ifor(j=0;j<=i/2;j++)

printf("%d ",c(i,j));

if(i%2!=0)

k=i/2;

else

k=i/2-1;

for(j=k;j>=0;j--)

printf("%d ",c(i,j));

printf("\n");

return 0;

int c(int n,int k)

__int64 i,j,h,sum;

__int64 a[100];

for(i=n,j=1;i>n-k;i--,j++){

a[j]=i;

sum=1,h=1;

for(i=1;isum=sum*a[i];

while(sum%h==0&&h<=k){

sum=sum/h;

h++;

return sum;

楊輝三角形

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

楊輝三角形

在螢幕上顯示楊輝三角形 問題分析與演算法設計 楊輝三角形中的數,正是 x y 的n次方冪展開式中各項的係數。從楊輝三角形的特點出發,可以總結出 1 第n行有n 1個值 設起始行為第0行 2 對於第n行的第j個值 n 2 當 j 1 或 j n 1 時 其值為1 當 j!1 且 j!n 1時 其值為第...

楊輝三角形

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