杨辉三角只用一维数组C语言,只用一个一维数组打印杨辉三角

要求: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

#include

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

{

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

{

printf("%d\t", data[j]);

}

printf("\n");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值