要求:1)用户输入打印行数N
2)只用一个一维数组,并且数组的大小不得大于行数N
3)杨辉三角如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
……
……
程序大体思想为:用一个一维数组存储上一行的值,从而可以计算出本行的值。但是需要注意的是必须从后往前计算,否则会覆盖掉需要的值。
如:计算第四行的值 计算第4个值为data[4] + data[3],然后将结果存入data[4]。
反之若从第一个数字开始计算,会出现:第二个数 = data[1] + data[2],然后将值存入data[2]。那么第三个数如何计算呢??
代码如下:
#include <stdio.h>
#include <malloc.h>
void printYanghui(int line);
int main(void)
{
int line = 0;
printf("请输入行数N:");
scanf("%d", &line);
printYanghui(line);
return 0;
}
void printYanghui(int line)
{
int i, j;
int* data = (int*)malloc(line*sizeof(int));//动态创建数组
if(line==1)//只打印一行
{
printf("1\n");
}
else if(line == 2)//只打印2行
{
printf("1\n1\t1\n");
}
else//打印三行以上
{
data[0] = 1;
data[1] = 1;
data[2] = 1;
printf("1\n1\t1\n");
for(i=3; i<line+1; i++)//第i行的数字个数为i
{
data[i-1] = 1;
for(j=i-2; j>0; j--)//按照从倒数第二个数字开始重新计算data数组。否则从前面开始会覆盖掉前面的值
{
data[j] = data[j-1] + data[j];
}
data[0] = 1;
for(j=0; j<i; j++)
{
printf("%d\t", data[j]);
}
printf("\n");
}
}
}