题目:
输出以下的杨慧三角(要求输出10行)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
. . . . .
. . . . .
. . . . .
分析:
通过观察,我们可以发现题目中的“杨辉三角形”的规律:
- 第n行,有n个数
- 每个数等于“上一行同样位置的数” + “上一行左边的数”,如第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个单位,就可以防止数组越界。
代码实现:
#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;
}