1. 程式人生 > >巴斯卡三角形(楊輝三角)

巴斯卡三角形(楊輝三角)

參考資料:
1.
巴斯卡三角的來歷
2.
巴斯卡是十七世紀的一位法國數學家,也是歷史上第一位發明了加法計算機的人!他造出“巴斯卡三角形”的方法是這樣的:先在紙上寫出一行和一列的“ 1 “ ,然後在各個位置中填入數字,每一個位置上的數字都是它上面一個數和左邊一個數的和。接下來,把這個表右轉45 ° ,放正了,就得到上面的數字三角形了!
3.
現在的數學書裡,都把這個三角形稱為“巴斯卡三角形” ,事實上,在南宋楊輝所寫的數學書裡面,早就介紹了由北宋賈憲所創造出來的相同三角形了(所以在中國稱為“賈憲三角”或“楊輝三角” ) ,時間可要比巴斯卡早了600年。
組合數計算方法:C(n,m)=n!/[m!(n-m)!]

#include <stdio.h>
#define N 12
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;
}/**上述程式是解決巴斯卡三角形問題的遞迴方程式。
在主函式中依次combi(0,0)->combi(1
,0)
->
combi(1,1)->combi(2,0)->combi(2,1)->combi(3,1)->其實很簡單, 就是這樣一個過程,公式是經過推導的,有興趣也可以自己推導! 這種問題沒有為什麼,就只有怎麼做到!combi(0,0)->combi(1,0)->combi(1,1)->combi(2,0)->combi(2,1)->combi(3,1)->. 把這些代入得出p並且輸出! 懂得如何實現就可以了!高深一點, 就要學會自己推導公式,也就是真正演算法的精髓。**/ int main() { int n, r, t; for
(n = 0; n <= N; n++) { for(r = 0; r <= n; r++) { int i;/* 排版設定開始 */ if(r == 0) { for(i = 0; i <= (N-n); i++) printf(" "); } else { printf(" "); } /* 排版設定結束 */ printf("%3d", combi(n, r)); } printf("\n"); } }

相關推薦

三角形三角

參考資料: 1. 巴斯卡三角的來歷 2. 巴斯卡是十七世紀的一位法國數學家,也是歷史上第一位發明了加法計算機的人!他造出“巴斯卡三角形”的方法是這樣的:先在紙上寫出一行和一列的“ 1 “ ,然

java演算法之簡單的帕三角Pascal’s Triangle

轉載自:http://blog.csdn.net/ylyg050518/article/details/48517151 今天這道題目是也是一個經典的問題,列印Pascal’s Triangle,(帕斯卡三角或者說是楊輝三角)。 問題描述  Given numRo

LeetCode 118. Pascal's Triangle 三角

== pascal else 只需要 first [1] blog 日期 都是 Given numRows, generate the first numRows of Pascal‘s triangle. For example, given numRows = 5,R

洛谷2822 組合數問題三角

傳送門 【題目分析】 不得不說NOIP DAY2還是有點東西啊。。。。。。 考慮組合數的計算:,又有,那麼就根據這個打印出前5行組合數: 眼熟的感覺。。。。沒錯這就是楊輝三角。。。。。 所以在預處理2000*2000的楊輝三角的時候記錄一下當前列有多少為k的倍數,然後直接O

[佇列] 二項式係數值三角

將二項式(a + b)^ i展開,其係數構成楊輝三角形 楊輝三角除第一行外,每一行的值是上一行相鄰的兩個數相加 左右的邊上都是 1 ,可以看做0 + 1(在最外層加上一個0) #includ

二維陣列的應用三角

import java.util.Scanner; /**  * @author Jocany  *程式碼:楊輝三角  */ public class ArrayTest3 { //分析: //A:任何一行的第一列和最後一列都是1 //B:從第三行開始,每一個數據是它上一行

Pascal triangle 三角製表符

Description: By using two-dimensional array, write C program to display a table that represents a Pascal triangle of any size. In

組合數三角

原來組合數和楊輝三角是有關係的: 楊輝三角上的每一個數字都等於它的左上方和右上方的和(除了邊界) 第n行,第m個就是,就是C(n, m) (從0開始) 所以以後求楊輝三角或者組合數都可以用到下面的遞推公式: #include<cstdio> c

LeetCode | Pascal's Triangle三角

Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return [ [1], [1,1], [1,2,

pascals triangle ii三角、帕三角

題目描述 Given an index k, return the k th row of the Pascal’s triangle. For example, given k = 3, Return[1,3,3,1]. Note: Could you optimize your

三角形

func col else pre ech color 巴斯卡三角形 font popu 算法分析: 詳情參考: http://blog.csdn.net/yxstars/article/details/8664955 算法實現: &l

HDU 5794 A Simple Chess三角+容斥原理+Lucas

exgcd -i -- || 兩種方法 sizeof put amp mem 題目鏈接 A Simple Chess 打表發現這其實是一個楊輝三角…… 然後發現很多格子上方案數都是0 對於那寫可能可以到達的點(先不考慮障礙點),我們先叫做有

Combinatorics——HDUOJ 1799 - 迴圈多少次?三角 - 排列組合

原題: Problem Description 我們知道,在程式設計中,我們時常需要考慮到時間複雜度,特別是對於迴圈的部分。例如, 如果程式碼中出現 for( i=1; i<=n; i++) OP ; 那麼做了n次OP運算,如果程式

洛谷P1118 [USACO06FEB]數字三角形 DFS+三角

看了解題才知道係數跟楊輝三角有關... 楊輝三角,是二項式係數在三角形中的一種幾何排列。 比如n=4時,假設答案是a,b,c,d,那麼滿足a*1+b*2+c*2+d*1==sum(1,2,2,1是楊輝三角的第三行) 這樣的話直接搜尋就好了 #include<iostream

poj 3252 Round Numbers 三角求組合數

題目連結:poj 3252 題意:給出範圍為 [a , b] 的區間,問在這區間內的每個數字,假如它的二進位制位0的個數大於1的個數,就說明它是Round Numbers,問你有多少個Round Numbers數? 題解:首先楊輝三角求組合數學,見程式碼。   ///此

每週一演算法(3):三角形

寫了前面兩個發現可能很弱智,這些簡單的演算法還要寫一大堆 所以簡單的演算法我們只貼程式碼,和簡單的描述,不做詳細說明 看上圖就知道什麼意思了。 #include <stdio.h> #define N 12 //列印多少行 long combi(int n, in

編碼輸出圖形的思想:最重要的不是怎麼敲,而是怎麼想!三角和輸出金字塔!

我們在程式設計練習初始階段總會碰到這樣的演算法題,輸出一個怎樣怎樣的圖形,達到什麼樣的效果,其實這樣的題都會有一個固定的思想。 首先要發現其中隱藏的規律,既然是輸出圖形,怎麼擺放一定是有規律的,要不然各種亂,一點規律沒有,這樣的題就一點意義都沒有了。所以拿到這種演算法題,

兩個python小練習 漢諾塔 三角

漢諾塔 原理:利用遞迴 1、將前n-1個盤子從A移到B上 2、將最後一個盤子從A移到C上 3、將B的n-1個移到C上 其次數為:1,3,7……即2n+1 python程式碼: def move(n,a,b,c):     if n==1: &nb

求組合數取模三角打表 & 求逆元擴充套件歐幾里得、費馬小定理、尤拉定理、線性求法 & Lucas

    在acm競賽中,組合數取模的題目還是經常會見到的,所以這是有必要掌握的一個演算法。我本人就因為這個東西而被坑了很多次了= =之前的部落格也都扯過了,就不多說了,下面進入正題。 (1)楊輝三角求組合數     楊輝三角這個東西應該都不陌生,三角的兩邊始終為一,之後向

組合數取模三角+Lucas定理+模合數

/* (1) 1 <= m <= n <= 1000 和 1 <= p <= 10^9 ( p可以是任何數 ) 這個問題比較簡單,組合數的計算可以靠 楊輝