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

要求: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");
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值