杨辉三角的相关知识
杨辉三角图:
杨辉三角的规律
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("\n"); } 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("\n"); } 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("\n"); } 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("\n"); } return 0; }