贾宪(杨辉 帕斯卡 巴斯卡)三角形(经典算法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,编程,算法,swing,pascal)