巴斯卡(Pascal)三角形基本上就是在计算 rCn ,其中 r 为行(row),n 为列(column)。因为三角形上的每一个数字都会对应一个 rCn,如下:
对应的数字如下图所示:
巴斯卡三角形中的 rCn 可以使用下面的公式来计算,以避免阶乘运算时的数值溢出:
rC0 = 1
rCn = rCn-1 * (r - n + 1) / n
解决了计算 rCn 的问题,剩下的问题就是如何将这些数字排列成三角形了。
代码实现:
#include <stdio.h>
#define HEIGHT 12
int combi ( int r , int n ){
int p = 1 ;
int i ;
for ( i = 1 ; i <= n ; i ++) {
p = p * ( r - i + 1 ) / i ;
}
return p ;
}
int main () {
int r ;
for ( r = 0 ; r < HEIGHT ; r ++) {
char format [ 5 ];
sprintf ( format , "%% %ds" , ( HEIGHT - r ) * 3 );
printf ( format , "" );
int n ;
for ( n = 0 ; n <= r ; n ++) {
printf ( "%6d" , combi ( r , n ));
}
printf ( "\\n" );
}
return 0 ;
}