ACM中楊輝三角的多種解法
楊輝三角的多種解法
楊輝三角的相信大家很熟悉吧,但是大家能用多少中方法寫出來呀,一般人都只會想到兩種,遞迴和二項式。當用遞推時,有時在解題是根本沒必要需要那麼多呀,而只要楊輝三角的某一行,資料小時,我們可以用二項式來計算,但是資料比較大時,二項式算也是很麻煩的,那麼還有其它的方法嗎?所以下面我就介紹幾種計算楊輝三角的方法吧。
主要要記住第四種。。。。
一:二維陣列
遞推公式:f[1][1]=1 , f[i][j]=f[i-1][j-1]+f[i-1][j]
核心程式碼:
f[1][1]=0; for(int i=1;i<10;i++) { for(int j=1;j<=i;j++) { f[i][j]=f[i-1][j-1]+f[i-1][j]; } }
二:一維陣列
思想:用一個一維陣列把相鄰兩個數的和計算出來儲存,到下一行時就輸出。。。
程式碼:
#include <stdio.h> void main() { int N = 13; /* 維數 */ int a[80] = {0}; int b[80] = {0}; int i, j; b[1]=1; for (i = 1; i <= N; i++) { for (j = 1; j <= i; j++) a[j] = b[j] + b[j-1]; for (j = 1; j <= i; j++) /* copy當前行a[]到b[]中以備下行的所用 */ { b[j] = a[j]; printf("%-6d", b[j]); } printf("\n"); } }
分析: 其思路是用一維陣列做,實際上用的是兩個一維陣列a[], b[].其中a[]是儲存當前行各元素的值, 而b[]可以認為是一個臨時陣列, 它是a[]的一個備份, 也就是說在每行a[]元素置數完畢後,將a[]中的內容拷貝到b[]中,因為進行下一行的運算時, a[]會被重置, 而且由楊輝三角的規律知下一行要用到上一行的元素, 這樣在計算下一行的a[]時就可以用儲存在b[]中的上一行的元素了(咋感覺這麼囉嗦呢^_^)。也正因為如此, 在每一行運算完之後,就要將其輸出顯示, 下一行時a[]就是新值了。所以用這種方法最後程式結束時並沒有將三角中所有元素儲存下來,只是在程式執行過程中將其輸出。
再看其程式的核心部分: a[j] = b[j] + b[j-1];
三:二項式定理:
公式:第n行第i個數表示為C(n-1,r) 注:C(n,m)=n!/[m!(n-m)!]
程式碼:#include<cstdio>
#include<iostream>
using namespace std;
int C(int n,int m)
{
int k=1,j=1,i;
for(i=n;i>n-m;i--)
{
k=k*(i)/j; //注意組合數的演算法,分子從大到小計算,分母從小到大計算
j++;
}
return k;
}
int main()
{
int i,j;
for(i=1;i<=10;i++)
{
for(j=0;j<i;j++)
{
printf("%d ",C(i-1,j));
}
printf("\n");
}
return 0;
}
四:遞推公式法:
這個方法接觸還是在今年的多校聯合的題目中hdu4927,不然我也不會知道這個方法,這個方法感覺跟二項式有點關係。。。。
這個方法就直接貼程式碼啦。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int b=1,i,j;
for(i=1;i<10;i++)
{
b=1;
for(j=1;j<=i;j++)
{
printf("%d\t",b);
b=b*(i-j)/j; //核心部分
}
printf("\n");
}
return 0;
}
相關推薦
ACM中楊輝三角的多種解法
楊輝三角的多種解法 楊輝三角的相信大家很熟悉吧,但是大家能用多少中方法寫出來呀,一般人都只會想到兩種,遞迴和二項式。當用遞推時,有時在解題是根本沒必要需要那麼多呀,而只要楊輝三角的某一行,資料小時,
Python中楊輝三角的理解(廖雪峰教程例)
在看到廖雪峰教程生成器一節習題楊輝三角時,一開始感覺很苦惱,沒有思路,網上的各種解答也只是梳理程式執行過程,而沒有抽象化解決問題的思路 注意:看此教程前請先學習生成器的原理,yield返回的用法規律,不然可能會懵逼。 下面我按照自己的理解寫下思路: 首先附上我們需要求得
Java小題,通過JNI調用本地C++共享庫中的對應方法實現楊輝三角的繪制
question 文件夾 path ron variable iostream ring printf spl 1.在Eclipse中配置Javah,配置如下 位置是你javah.exe在你電腦磁盤上的路徑 位置:C:\Program Files\Java\jdk1.
楊輝三角的幾種解法(python)
1. 計算楊輝三角,普通法 #計算楊輝三角 普通法 triangle = [[1],[1,1]] for i in range(2,6): swap = triangle[i-1] cul = [1] for j in range(i-1):
js中實現楊輝三角
實現效果:楊輝三角 即: 提示使用者輸入要實現的楊輝三角行數: 請輸入楊輝三角的行數: 8 程式碼實現後的效果如下: 1 1.1 1.2.1 1.3.3.1 1.4.6.4.1 1.5.10.10.5.1 1.6.15.20.15.6.1 1
用java中的二維陣列列印輸出《楊輝三角》
package oop; /** * * @author CZL * 使用二維陣列列印一個 10 行楊輝三角. 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 .... 【提示】 1. 第一行有 1 個元素, 第
java中leetcode之用Arraylist List實現楊輝三角
要用java ArrayLIsts實現下面的形式,題目是在leetcode上看到的, 1 1 1 1 2 1 1 3 3 1 具體看看用程式碼怎麼
C語言列印楊輝三角的多種方法
3.在螢幕上列印楊輝三角。 1 1 1 1 2 1 1 3 3 1 解法一: #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int i,j,n = 0; //首
ACM程式設計選修課——1031: Hungar的得分問題(二)(楊輝三角+二進位制轉換)
1031: Hungar的得分問題(二) 時間限制: 1 Sec 記憶體限制: 64 MB 提交: 15 解決: 10 [提交][狀態][討論版] 題目描述 距離正式選秀時間越來越近了,今天H
C++編寫利用資料結構中佇列(Queue)打印出使用者所指定長度的楊輝三角
#include <iostream> #include <assert.h> using namespace std; class Yanghui{ public: class Node{ public: Node():data(0){
楊輝三角的鏈佇列解法(鏈佇列操作標頭檔案)
//LinkQueue.h #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define datatype int struct n
Pascal's Triangle II 生成楊輝三角中的某行
題目: 連結 解答: 在上一題基礎上修改,注意行號。 程式碼: class Solution { public: vector<int> getRow(int rowIndex) { vector<vector<int> > res
leetcode 118 Pascal's Triangle(楊輝三角) python3 兩種解法(清晰的分類討論 / 優雅的拼接反向疊加)
class Solution: def generate(self, numRows): """ :type numRows: int :rtyp
求第n行楊輝三角(n很大,取模
int 為什麽不能 style code 為我 max sin clas pan 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 typedef
簡易的楊輝三角
而已 分享 scan can png std 維數 void src 利用二維數組,可以更加清晰的理解楊輝三角的規律: 將二維數組看成表格形式,總結楊輝三角規律如上。 代碼: #include <stdio.h> void main(){ int
python3 實現 楊輝三角
src 組合 楊輝三角 不同 tex 合數 三角形 itl enter 楊輝三角,是二項式系數在三角形中的一種幾何排列。在歐洲,這個表叫做帕斯卡三角形。帕斯卡(1623----1662)是在1654年發現這一規律的,比楊輝要遲393年,比賈憲遲600年 概述 前提:每行
C語言打印楊輝三角(2種方法)
階乘 這就是 其它 原因 空格 自定義函數 一行 就會 列數 楊輝三角是我們從初中就知道的,現在,讓我們用C語言將它在計算機上顯示出來。在初中,我們就知道,楊輝三角的兩個腰邊的數都是1,其它位置的數都是上頂上兩個數之和。這就是我們用C語言寫楊輝三角的關鍵之一。在高中的時候我
遞歸 正則表達式 楊輝三角
排列 這也 合數 title 個數 對稱 表示 n-2 ... 遞歸 1 1 2 3 5 8 13 21 34 ?1 2 3 4 5 6 7 8 9 ? function dg (n){ if (n == 1 || n == 2) { return 1;
楊輝三角
sca 楊輝三角 () scan n) pri clu can tdi #include<stdio.h> main(){ int n,i,j; int s[10][10];printf("請輸入楊輝三角的行數n:");scanf("%d",&n);fo
楊輝三角js算法
fault ret 一個 藝龍網 出了 多少 職位 自己 -1 上個星期,小熙有幸去藝龍網面試web前端開發職位,技術經理在面試中,給小熙出了一道數學題。學名楊輝三角。用函數計算出第n行,第m個數值是多少。直接看效果吧 讓我用函數算出,第n行,第m個數字是什麽。作為理