贾宪(杨辉 帕斯卡 巴斯卡)三角形(经典算法Java的实现)

巴斯卡(Pascal)三角形基本上就是在解 nCr ,因為三角形上的每一個數字各對應一個nCr,其中 n 為 row,而 r 為 column,如下:
    0C0
   1C0 1C1
  2C0 2C1 2C2
 3C0 3C1 3C2 3C3
4C0 4C1 4C2 4C3 4C4


可以形象的描述为 在倒过来的3个数中够成的3角形中 下边一个等于上边两个数之和。


巴斯卡三角形中的 nCr 可以使用以下這個公式來計算,以避免階乘運算時的數值溢位:

nCr = [(n-r+1)/r] * nCr-1
nC0 = 1


代码如下:
import java.awt.*;
import javax.swing.*;
public class Pascal extends JFrame {
public Pascal()
{
setBackground(Color.white);
setTitle("巴斯卡三角形");
setSize(520, 350);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
show();
}
private 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;
}
public void paint(Graphics g)
{
final int N = 12;
int n, r, t;
for(n = 0; n <= N; n++)
{
for(r = 0; r <= n; r++)
g.drawString(" " + combi(n, r),
(N-n)*20 + r * 40, n * 20 + 50);
}
}
public static void main(String args[])
{
Pascal frm = new Pascal();
}
}

你可能感兴趣的:(贾宪(杨辉 帕斯卡 巴斯卡)三角形(经典算法Java的实现))