Pascal在C中的三角形印刷(Pascal's triangle printing in C)

优质
小牛编辑
115浏览
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