C 语言中的帕斯卡三角形打印

帕斯卡三角形是工程专业学生学习的经典示例之一。它有许多解释。其中最著名的一种是它与二项式方程的结合使用。

帕斯卡三角形

三角形外的所有值都被视为零 (0)。第一行是 0 1 0,而只有 1 在帕斯卡三角形中占据一个空间,0 是不可见的。第二行是通过添加 (0+1) 和 (1+0) 获得的。输出夹在两个零之间。该过程持续到达到所需水平。

帕斯卡三角形可以使用二项式定理推导出来。我们可以使用组合和阶乘来实现这一点。

算法

假设我们非常了解阶乘,我们将逐步研究绘制帕斯卡三角形的核心概念 −

开始
步骤 1 - 取要打印的行数 n。
步骤 2 - 进行外层迭代 I n 次以打印行
步骤 3 - 进行内层迭代 J 至 (N - 1)
步骤 4 - 打印单个空格" "
步骤 5 - 关闭内层循环
步骤 6 - 进行内层迭代 J 至 I
步骤 7 - 打印 I 和 J 的 nCr
步骤 8 - 关闭内层循环
步骤 9 - 每次内层迭代后打印 NEWLINE 字符
步骤 10 - 返回
STOP

伪代码

我们可以推导出上述算法的伪代码,如下所示 −

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 NEWLINE
   END FOR

end procedure

实现

让我们完整地实现这个程序。我们将实现阶乘(非递归)和 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("
");
   }
   return 0;
}

输出应如下所示 −

               1
             1   1
           1   2   1
         1   3   3   1
       1   4   6   4   1
     1   5  10  10   5   1

patterns_examples_in_c.html