巴斯卡三角形(楊輝三角)
參考資料:
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可以是任何數 ) 這個問題比較簡單,組合數的計算可以靠 楊輝