题目:

输出以下的杨辉三角(要求输出10行)

1
1  1
1  2  1
1  3  3  1
1  4  6  4  1
.  .  .  .  .
.  .  .  .  .  
.  .  .  .  .
分析:

通过观察,我们可以发现题目中的“杨辉三角形”的规律:

  1. 第n行,有n个数
  2. 每个数等于“上一行同样位置的数” + “上一行左边的数”,如第n行第m项 == 第n-1行第m项 + 第n-1行第m-1项,如,

                             1

                             1  1

                             1  2  1  -------- 2 = 1 + 1

                             1  3  3  1

                             1  4  6  4  1 --- 6 == 3 + 3

其实“杨辉三角形”的规律还有很多,如:斜线上数字的和等于其向左(从左上方到右下方的斜线)或向右拐弯(从右上方到左下方的斜线)拐角上的数字,等等。但以上2点足以解题,所以在这里就不深入探究“杨辉三角形”了


知道了以上2点,我们可以很容易地写出1个2维数组 + 2个for循环的代码(一个控制行,一个控制列).

但有2点需要注意:

  1. 每个数都是由上一行的数计算而来的,那第1行怎么办?
  2. 每个数都是由这一列及上一列的数计算而来的,那第一列怎么办?

为了解决这个问题,我们只需要让数组的行、列各扩大1个单位,就可以防止数组越界。


代码实现:
#include <stdio.h>

#define ROW 10//定义行数

int main()
{
	int i = 0;
	int j = 0;
	//为防止越界,行、列均 + 1
	int arr[ROW + 1][ROW + 1] = {1};
	
	for (i = 1; i < ROW + 1; i++)
	{
		for (j = 1; j <= i; j++)
		{
			arr[i][j] = (arr[i - 1][j] + arr[i - 1][j - 1]);
			printf("%-3d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}
运行结果:

谭浩强 第5版 第6章 第6题 _杨辉三角形