打印杨辉三角有很多种做法,通常有两种:一种是事先根据公式:a[i][j]=a[i-1][j-1]+a[i-1][j]计算出所有的结果,然后再在循环结构中打印出来,这种比较简单,效率也高,就是空间复杂度太过于高了,一般打印N层的杨辉三角,就需要开辟一个N*N的矩阵。另外一种就是在打印杨辉三角的过程中,动态的计算出结果,并打印出来,这样,只需要一个大小为N的数组即可,下面是第二种的代码:
#include<stdio.h>
int main()
{
int i,j,n,block;
scanf("%d",&n);
int a[n+1];
for(i=0;i<n+2;i++)
a[i]=0;
a[1]=1;
for(i=1;i<=n;i++)
{
block=2*(n-i);
while(block--)
printf(" ");/*打印前面的空格*/
for(j=0;j<i;j++)
{
printf("%d",a[j]+a[j+1]);
printf(" ");/*三个空格符*/
}
for(;j>0;j--)
a[j]=a[j]+a[j-1];/*从后往前,以此用前两个数的和覆盖后一个数,用于下一次输出*/
printf("\n");
}
return 0;
}