關於楊輝三角的論述
問題描述
楊輝三角形又稱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 輸入描述 輸入...