巴斯卡(Pascal)三角形基本上就是在解 nCr ,因为三角形上的每一个数字各对应一个nCr,其中 n 为 row,而 r 为 column,如下:
0C0
1C0 1C1
2C0 2C1 2C2
3C0 3C1 3C2 3C3
4C0 4C1 4C2 4C3 4C4
对应的数据如下图所示:
解法
巴斯卡三角形中的 nCr 可以使用以下这个公式来计算,以避免阶乘运算时的数值溢位:
n
Cr = [(n-r+1)/r] * n
Cr-1
n C0 = 1
n C0 = 1
C语言实现
#include <stdio.h> #define N 12 long combi(int n, int r){ int i; long p = 1; for(i = 1; i <= r; i++) p = p * (n-i+1) / i; return p; } void paint() { int n, r, t; for(n = 0; n <= N; n++) { for(r = 0; r <= n; r++) { int i; /* 排版设定开始 */ if(r == 0) { for(i = 0; i <= (N-n); i++) { printf(" "); } } else { printf(" "); } /* 排版设定结束 */ printf("%3d", combi(n, r)); } printf("\n"); } } int main() { paint(); return 0; }