1. 程式人生 > >【C語言】巴斯卡三角問題

【C語言】巴斯卡三角問題

巴斯卡(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