一、杨辉三角形特点
1.每一行的首尾都是1。
2.每个数字有它上方的两个数字求和所得。
3.杨辉三角形中的每个数字表示一个组合数。第 i行第 j列的数字对应着 C(i-1, j-1),即从 (i-1) 个元素中选择 (j-1) 个元素的方法数。
4. 特殊性质:杨辉三角形的每一行都是二项式系数展开式的系数。例如,((a+b)^n) 的展开式中的系数就可以在第 (n) 行找到。
因此,杨辉三角形提供了一种直观的方式来理解和计算组合数。
二、对应的代码
通过两个循环来打印杨辉三角形,外部循环控制行数,内部循环控制每行输出的数字。
当 `rows` 被设置为 4 时,程序的执行逻辑如下:
(1)用户被要求输入要打印的行数。
(2)因为 `rows` 被设置为 4,所以程序将打印一个 4 行的杨辉三角形。
(3)外部循环 `for (i = 0; i < rows; i++)` 开始执行,`i` 从 0 开始,直到 3(因为 `rows` 是 4)。
(4) 内部循环 `for (space = 1; space <= rows - i; space++)` 开始执行,这个循环负责打印每行前面的空格,确保输出的数字居中对齐。对于每一行来说,行数 `rows - i` 决定了当前行的前导空格数,随着行数增加,前导空格数逐渐减少。
- 当 `i` 是 0 时,第一行打印 4 个前导空格;
- 当 `i` 是 1 时,第二行打印 3个前导空格;
- 当 `i` 是 2 时,第三行打印 2个前导空格;
- 当 `i` 是 3 时,第四行打印 1个前导空格。
(5)内部循环 `for (j = 0; j <= i; j++)` 开始执行,负责打印当前行的数字。
- 对于每一行,`j` 从 0 开始,直到 `i`。
- 当 `j` 是 0 时,`coef` 被设置为 1。
- 对于每一行的其余位置,`coef` 的值通过杨辉三角形的规则计算而来:
`coef = coef * (i - j + 1) / j`。这个公式表示当前位置的值是上一行相邻两个位置的值之和。
举例:假设 `rows` 被设置为 4。
当 `i` 为 0 时(第一行):
- `j` 从 0 开始,直到 `i`(也就是 0),所以内部循环只执行一次。
- 因为 `j == 0 || i == 0` 成立,所以 `coef` 被设置为 1。
- 然后程序输出 `coef`,也就是 `1`。
当 `i` 为 1 时(第二行):
- `j` 从 0 开始,直到 `i`(也就是 1),所以内部循环执行两次。
- 当 `j` 是 0 时,`coef` 被设置为 1。
- 当 `j` 是 1 时,`coef` 的计算为 `coef = coef * (1 - 1 + 1) / 1`,即 `coef = 1 * 1 / 1`,结果仍然是 1。
- 然后程序输出两个 `coef`,也就是 `1` 和 `1`。
当 `i` 为 2 时(第三行):
- `j` 从 0 开始,直到 `i`(也就是 2),所以内部循环执行三次。
- 当 `j` 是 0 时,`coef` 被设置为 1。
- 当 `j` 是 1 时,`coef` 的计算为 `coef = coef * (2 - 1 + 1) / 1`,即 `coef = 1 * 2 / 1`,结果为 2。
- 当 `j` 是 2 时,`coef` 的计算为 `coef = coef * (2 - 2 + 1) / 2`,即 `coef = 2 * 1 / 2`,结果为 1。
- 然后程序输出三个 `coef`,也就是 `1`、`2` 和 `1`。
当 `i` 为 3 时(第四行):
- `j` 从 0 开始,直到 `i`(也就是 3),所以内部循环执行四次。
- 当 `j` 是 0 时,`coef` 被设置为 1。
- 当 `j` 是 1 时,`coef` 的计算为 `coef = coef * (3 - 1 + 1) / 1`,即 `coef = 1 * 3 / 1`,结果为 3。
- 当 `j` 是 2 时,`coef` 的计算为 `coef = coef * (3 - 2 + 1) / 2`,即 `coef = 3 * 2 / 2`,结果为 3。
- 当 `j` 是 3 时,`coef` 的计算为 `coef = coef * (3 - 3 + 1) / 3`,即 `coef = 3 * 1 / 3`,结果为 1。
- 然后程序输出四个 `coef`,也就是 `1`、`3`、`3` 和 `1`。
通过这种方式,内部循环计算并输出了每一行的数字,最终构成了一个 4 行的杨辉三角形。
6. 每次打印完一行数字后,程序输出一个换行符,进入下一行的打印。
7. 最终,程序输出了一个 4 行的杨辉三角形。
8.通过sum=sum+coef进行简单的求和。
#include<stdio.h>
int main()
{
int rows, space, i, j;
int coef = 1;
int sum = 0;
printf("请输入需要的行数:");
scanf("%d", &rows);
for (i = 0; i < rows; i++)
{
for (space = 1; space <=rows - i; space++)
printf(" ");
for (j = 0; j <= i; j++)
{
if (i == 0 || j == 0)
coef = 1;
else
coef = coef * (i - j + 1) / j;
printf("%4d", coef);
sum = sum + coef;
}
printf("\n");
}
printf("所有数字总和为:%d\n", sum);
return 0;
}