您现在的位置是:首页 >技术教程 >[C语言][典例详解]打印杨辉三角(找规律简单实现)网站首页技术教程

[C语言][典例详解]打印杨辉三角(找规律简单实现)

XXJ不会写代码 2024-07-01 18:01:02
简介[C语言][典例详解]打印杨辉三角(找规律简单实现)

目录

杨辉三角的相关知识

杨辉三角图:

 

杨辉三角的规律

在编程中实现

第一步 :我们先实现数字的打印,后面再加上空格构成三角形形状;

​编辑

1.首先我们可以直观的看出三角形的两个斜边都是1;所以我们先打印斜边的1(代码实现+分析+运行效果:)

2.打印中间的数据(代码实现+分析+运行效果)

 第二步:加上空格构成三角形(代码实现+分析+运行效果)

 总代码:


杨辉三角的相关知识

杨辉三角图:

 

 


杨辉三角的规律

1.每个数等于它上方两数之和。(如下图1)

 2.每行数字左右对称,由1开始逐渐变大。(如图)

 3.第n行的数字有n项。(由上图容易看出)

4.(a+b)^n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。(如图)

 

 所以我们也可以用二项式来写出,但下面所讲的是用上面行的数字加来得下面所要的数字


在编程中实现

杨辉三角在编程实现中较为容易。最常见的算法便是用上一行递推计算;也有运用和组合的对应关系而使用阶乘计算的,然而后者速度较慢且阶乘容易溢出

第一步 :我们先实现数字的打印,后面再加上空格构成三角形形状;

如:

1.首先我们可以直观的看出三角形的两个斜边都是1;所以我们先打印斜边的1(代码实现+分析+运行效果:

代码实现:

int main()
{
	int arr[10][10] = { 0 };
	int i = 0;
	for (i=0;i<10;i++)
	{
		arr[i][0] = 1;
		int j = 0;
		for (j = 0; j < i + 1; j++)
		{
			if (i == j)
			{
				arr[i][j] = 1;
			}
		}
	}

	//打印看看效果
	for (i = 0; i < 10; i++)
	{
		int j = 0;
		for (j = 0; j < i + 1; j++)
		{
			printf("%d ",arr[i][j]);
		}
		printf("
");
	}
	return 0;
}

分析:

 

运行效果:

 


2.打印中间的数据(代码实现+分析+运行效果

利用上一行的前面一列的数加上一行本列数得到这个数

如:我们要得到第三行的第二个数2   即arr[3][1];即arr[3-1][1-1]+arr[3-1][1]=arr[3][1]=2

 代码实现:

int main()
{
	int arr[10][10] = { 0 };
	int i = 0;
	for (i=0;i<10;i++)
	{
		arr[i][0] = 1;
		int j = 0;
		for (j = 0; j < i + 1; j++)
		{
			if (i == j)
			{
				arr[i][j] = 1;
			}
			if (i > 1 && j > 0)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
			printf("%d ",arr[i][j]);
		}
		printf("
");
	}
	return 0;
}

代码分析:

 运行结果:

 第二步:加上空格构成三角形(代码实现+分析+运行效果

代码实现:

int main()
{
	int arr[10][10] = { 0 };
	int i = 0;
	for (i=0;i<10;i++)
	{
		int n = i;
		arr[i][0] = 1;
		int j = 0;
		for (j = 0; j < i + 1; j++)
		{
			if (i == j)
			{
				arr[i][j] = 1;
			}
			if (i > 1 && j > 0)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
			while (10 - (n + 1))
			{
				printf(" ");
				n++;
			}
			printf("%d ",arr[i][j]);
		}
		printf("
");
	}
    return 0;
}

代码分析:

运行结果:


 总代码:

int main()
{
	int arr[10][10] = { 0 };
	int i = 0;
	for (i=0;i<10;i++)
	{
		int n = i;
		arr[i][0] = 1;
		int j = 0;
		for (j = 0; j < i + 1; j++)
		{
			if (i == j)
			{
				arr[i][j] = 1;
			}
			if (i > 1 && j > 0)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
			while (10 - (n + 1))
			{
				printf(" ");
				n++;
			}
			printf("%d ",arr[i][j]);
		}
		printf("
");
	}

	return 0;
}

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。