Pascal在C中的三角形印刷(Pascal's triangle printing in C)
优质
小牛编辑
142浏览
2023-12-01
Pascal的三角形是工程专业学生的经典示例之一。 它有很多解释。 其中一个着名的是它用于二项式方程。
三角形外的所有值都被视为零(0)。 第一行是0 1 0而只有1获得pascal三角形中的空格,0是不可见的。 通过添加(0 + 1)和(1 + 0)来获取第二行。 输出夹在两个零之间。 该过程持续到达到所需水平。
Pascal的三角形可以使用二项式定理导出。 我们可以使用组合和阶乘来实现这一目标。
算法 (Algorithm)
假设我们非常了解阶乘,我们将研究以逐步方式绘制pascal三角形的核心概念 -
START
Step 1 - Take number of rows to be printed, n.
Step 2 - Make outer iteration I for n times to print rows
Step 3 - Make inner iteration for J to (N - 1)
Step 4 - Print single blank space " "
Step 5 - Close inner loop
Step 6 - Make inner iteration for J to I
Step 7 - Print nCr of I and J
Step 8 - Close inner loop
Step 9 - Print <i>NEWLINE</i> character after each inner iteration
Step 10 - Return
STOP
伪代码 (Pseudocode)
我们可以为上述算法推导出一个伪代码,如下所示 -
procedure pascals_triangle
FOR I = 0 to N DO
FOR J = 0 to N-1 DO
PRINT " "
END FOR
FOR J = 0 to I DO
PRINT nCr(i,j)
END FOR
PRINT <i>NEWLINE</i>
END FOR
end procedure
实现 (Implementation)
让我们全面实施这个程序。 我们将实现阶乘(非递归)以及ncr(组合)的函数。
#include <stdio.h>
int factorial(int n) {
int f;
for(f = 1; n > 1; n--)
f *= n;
return f;
}
int ncr(int n,int r) {
return factorial(n)/( factorial(n-r) * factorial(r) );
}
int main() {
int n, i, j;
n = 5;
for(i = 0; i <= n; i++) {
for(j = 0; j <= n-i; j++)
printf(" ");
for(j = 0; j <= i; j++)
printf(" %3d", ncr(i, j));
printf("\n");
}
return 0;
}
输出应该是这样的 -
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1