⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pascaltriangle.htm

📁 “常见程式演算”主要收集一些常见的程式练习题目
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>





  
  
  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">





  
  
  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">





  
  
  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">





  
  
  
  
  
  <title>巴斯卡三角形</title>
</head>


<body>





<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>





<h1><a href="AlgorithmGossip.htm">Algorithm Gossip:&nbsp;巴斯卡三角形</a></h1>





巴斯卡(Pascal)三角形基本上就是在解 nCr ,因为三角形上的每一个数字各对应一个n<big>C</big>r,其中 n 为 row,而 r 为 column,如下:<br>



    0<big>C</big>0<br>



   1<big>C</big>0 1<big>C</big>1<br>



  2<big>C</big>0 2<big>C</big>1 2<big>C</big>2<br>



 3<big>C</big>0 3<big>C</big>1 3<big>C</big>2 3<big>C</big>3<br>



4<big>C</big>0 4<big>C</big>1 4<big>C</big>2 4<big>C</big>3 4<big>C</big>4<br>



<br>



对应的数据如下图所示: <br>





<div style="text-align: center;"><img style="width: 500px; height: 307px;" alt="巴斯卡三角" title="巴斯卡三角" src="images/pascal.jpg"><br>



<br>



<div style="text-align: left;">
<h2>&nbsp;解法</h2>



</div>



<br>



<div style="text-align: left;">巴斯卡三角形中的 nCr 可以使用以下这个公式来计算,以避免阶乘运算时的数值溢位:<br>



<div style="margin-left: 40px; font-weight: bold; font-family: Courier New,Courier,monospace;">n<big><big>C</big></big>r = [(n-r+1)/r] * n<big><big>C</big></big>r-1 <br>



n<big><big>C</big></big>0 = 1&nbsp;</div>



</div>



</div>



<br>



<h2> 演算法</h2>




<br>




<pre>/* 计算nCr,但是并不快,只是方便 */<br>Procedure COMBI(n, r) [<br>    FOR(i = 1; i &lt;= r; i = i + 1)<br>        p = p * (n-i+1) / i;<br><br>    RETURN p;<br>] <br></pre>



<br>



解决 n<big>C</big>r 的算法之后,剩下的就是如何将这些数字排版成三角形的问题了,这就要看您是如何显示成果的了,下面的程式将分别示范文字模式(C实作)与视窗模式(Java实作)的解法。

<h2> 实作</h2>





<ul>



  <li> C
  </li>



</ul>




<pre>#include &lt;stdio.h&gt;<br>#define N 12<br><br>long combi(int n, int r){<br>    int i;<br>    long p = 1;<br><br>    for(i = 1; i &lt;= r; i++)<br>        p = p * (n-i+1) / i;<br><br>    return p;<br>}<br><br>void paint() {<br>    int n, r, t;<br><br>    for(n = 0; n &lt;= N; n++) {<br>        for(r = 0; r &lt;= n; r++) {<br>            int i;<br>            /* 排版设定开始 */<br>            if(r == 0) {  <br>                for(i = 0; i &lt;= (N-n); i++) {<br>                    printf("   ");<br>                }<br>            }<br>            else {<br>                printf("   ");<br>            } /* 排版设定结束 */<br><br>            printf("%3d", combi(n, r));<br>        }<br>        printf("\n");<br>    }<br>}<br><br>int main() {<br>    paint();<br>    return 0;<br>} <br></pre>




<br>




<ul>



  <li> Java
  </li>



</ul>




<pre>import java.awt.*; <br>import javax.swing.*; <br><br>public class Pascal extends JFrame { <br>    public Pascal() { <br>        setBackground(Color.white); <br>        setTitle("巴斯卡三角形"); <br>        setSize(520, 350); <br>        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); <br>        show(); <br>    } <br><br>    private long combi(int n, int r){ <br>        int i; <br>        long p = 1; <br><br>        for(i = 1; i &lt;= r; i++) <br>            p = p * (n-i+1) / i; <br>  <br>        return p; <br>    } <br><br>    public void paint(Graphics g) { <br>        final int N = 12; <br>        int n, r, t; <br><br>        for(n = 0; n &lt;= N; n++) { <br>            for(r = 0; r &lt;= n; r++) <br>                g.drawString(" " + combi(n, r), <br>                    (N-n)*20 + r * 40, n * 20 + 50); <br>        } <br>    } <br><br>    public static void main(String args[]) { <br>        Pascal frm = new Pascal(); <br>    } <br>}</pre>



<br>



<br>





</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -