您的位置:首页 > 其它

只用一个一维数组打印杨辉三角

2013-03-16 14:28 274 查看
要求: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");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  杨辉三角
相关文章推荐