您的位置:首页 > 编程语言 > C语言/C++

【C语言】巴斯卡三角问题

2015-06-02 21:58 246 查看
巴斯卡(Pascal)三角形基本上就是在计算 rCn ,其中 r 为行(row),n 为列(column)。因为三角形上的每一个数字都会对应一个 rCn,如下:

    0C0

   1C0 1C1

  2C0 2C1 2C2

 3C0 3C1 3C2 3C3

4C0 4C1 4C2 4C3 4C4

对应的数字如下图所示:


解题思路

巴斯卡三角形中的 rCn 可以使用下面的公式来计算,以避免阶乘运算时的数值溢出:

rC0 = 1

rCn = rCn-1 * (r - n + 1) / n

解决了计算 rCn 的问题,剩下的问题就是如何将这些数字排列成三角形了。

#include  <stdio.h>//此为c程序,后缀为.c
#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 ;
int s ;
int t ;
for ( r =  0 ; r < HEIGHT ; r ++)  {
int n;
char format [ 5 ];
sprintf ( format ,  "%% %ds" ,  ( HEIGHT - r )  *  3 );
printf ( format , "" );//format为字符数组,format里面的内容为% 36s, 这正好为printf函数提供了打印""内容的格式。

for ( n =  0 ; n <= r ; n ++)  {
printf ( "%6d" , combi ( r , n ));
}
printf ( "\n" );
}
getch();
}


以上部分转载:http://c.biancheng.net/cpp/html/2879.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: