一维数组打印杨辉三角
要求:减少内存的使用,只用一维数组完成杨辉三角的打印
int main()
{
int a[MAX]={1}; //初始化首元素为1,其余元素为0(可以看成MAX*(MAX+1)的二维数组,未打印部分就是0)
int n=MAX;
int i,j,l,r; //i是行数,j是列数;l用来保存上一行的a[j-1],r是上一行的a[j]
for(i=0;i<MAX;i++)
{
l=0; //首元素是1可以看成是首元素1前面还有一列0;1=上一行的1加上上一行的0
{
for(j=0;j<=i;j++) //进入第i行的打印
{
r=a[j];
a[j]=l+r; //杨辉三角的定义
l=r; //保存上一行的a[j](即下一次打印时的a[j-1],因为j++了),防止a[j]被下一行新得到的a[j]覆盖
printf("%4d",a[j]);
}
}
printf("\n");
}
}
效果如图:总体思想,用l和r来保存上一行的a[j-1]和a[j],
求出这一行的a[j]=上一行的a[j-1]+a[j](注意上一行a[j-1]的保存)