【C語言】巴斯卡三角問題
阿新 • • 發佈:2019-02-08
巴斯卡(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
以上部分轉載:http://c.biancheng.net/cpp/html/2879.html
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