概念:

杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

分析:

我们把上图三角形左边的空格去掉后进行分析:

观察上图可以发现:

1、上图三角形的第一列的每个元素都是1;

2、三角形的斜边每个元素都是1;

3、从第三行,第二列开始,三角形中间的每个元素的值都等于它上面两个元素的和。

思路:

我们可以把这个杨辉三角看成一个二维数组,而我们只需要打印这个数组的左下方部分 :

1、我们首先创建一个二维数组:

#define ROW 10
#define COL 10
int main()
{
	int arr[ROW][COL] = { 0 };
    return 0;
}

2、这个二维数组的第一列的元素都为1,即当COL==0时,arr[ROW][COL] = 1

3、这个二维数组的对角线的元素都为1,即当ROW == COL时,arr[ROW][COL] = 1

4、从第三行,第二列开始,数组中间的每个元素的值都等于它上面两个元素的和:

当(ROW>=2 && COL >=1)时,arr[ROW][COL] = arr[ROW - 1][COL - 1] + arr[ROW - 1][COL];

以上内容转换为代码:

#define ROW 10
#define COL 10
int main()
{
	int arr[ROW][COL] = { 0 };
	int i = 0;
	int j = 0;
	//第一列和对角线都为1
	for (i = 0;i < ROW;i++)
	{
		for (j = 0;j <= i;j++)
		{
			if (j == 0)//第一列为1
			{
				arr[i][j] = 1;
			}
			if (i == j)//对角线为1
			{
				arr[i][j] = 1;
			}
			//从第三行,第一列的元素开始,中间的每个元素都等于它上面的两个元素之和
			if (i >= 2 && j >= 1)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
		}
	}
    return 0;
}

打印:

打印时,只需要再遍历一次数组左下方的元素即可:

	for (i = 0;i < ROW;i++)
	{

		for (j = 0;j <= i;j++)
		{
			printf("%-3d ", arr[i][j]);
		}
		printf("\n");//打印完一行后换行
	}

效果如下:

如果想打印出刚开始的等腰三角形那种情况,只需要再控制一下每一行前面的空格数量,我们再次观察一下第一个图中杨辉三角的前三行:

当行号为3时,第一行有2个空格(ROW-1),第二行有1个空格(ROW-2),第三行有0个空格(ROW-3)

转换为代码:

for (i = 0;i < ROW;i++)
	{
		for (j = 0;j < (ROW - 1) - i;j++)//控制空格数量
		{
			printf("  ");
		}
		for (j = 0;j <= i;j++)
		{
			printf("%-3d ", arr[i][j]);
		}
		printf("\n");//打印完一行后换行
	}

因为 i 的初始值为0,所以循环条件中需要先给ROW - 1,然后再减 i 。

效果如下:

所有代码:

最后是整个程序的所有代码:

#include <stdio.h>
#define ROW 10
#define COL 10
int main()
{
	int arr[ROW][COL] = { 0 };
	int i = 0;
	int j = 0;
	//第一列和对角线都为1
	for (i = 0;i < ROW;i++)
	{
		for (j = 0;j <= i;j++)
		{
			if (j == 0)//第一列为1
			{
				arr[i][j] = 1;
			}
			if (i == j)//对角线为1
			{
				arr[i][j] = 1;
			}
			//从第三行,第一列的元素开始,中间的每个元素都等于它上面的两个元素之和
			if (i >= 2 && j >= 1)
			{
				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
			}
		}
	}
	for (i = 0;i < ROW;i++)
	{
		for (j = 0;j < (ROW - 1) - i;j++)//控制空格数量
		{
			printf("  ");
		}
		for (j = 0;j <= i;j++)
		{
			printf("%-3d ", arr[i][j]);
		}
		printf("\n");//打印完一行后换行
	}
	return 0;
}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐