日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

算法--组合数学:杨辉三角数学分析以及Java实现

發(fā)布時(shí)間:2025/3/20 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法--组合数学:杨辉三角数学分析以及Java实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.定義

楊輝三角,是二項(xiàng)式系數(shù)在三角形中的一種幾何排列。

下圖為楊輝三角部分?jǐn)?shù)據(jù)

2.楊輝三角規(guī)律

前提:每行端點(diǎn)與結(jié)尾的數(shù)為1

最重要的規(guī)律:

每個(gè)數(shù)字等于上一行的左右兩個(gè)數(shù)字之和。可用此性質(zhì)寫(xiě)出整個(gè)楊輝三角。即第n+1行的第i個(gè)數(shù)等于第n行的第i-1個(gè)數(shù)和第i個(gè)數(shù)之和,這也是組合數(shù)的性質(zhì)之一。

C(n+1,i)=C(n,i)+C(n,i?1)


2.1 楊輝三角與11的冪的關(guān)系

假設(shè)y=11^n

當(dāng)n=0時(shí): y=1; 當(dāng)n=1時(shí): y=11; 當(dāng)n=2時(shí): y=121; 當(dāng)n=3時(shí): y=1331; 當(dāng)n=4時(shí): y=14641; ……


2.2 楊輝三角與2的冪的關(guān)系

假設(shè)每一行的和為sum
則sum=2^(行數(shù)-1),如下:

第一行:1 1=2^0 第二行:1 1 1+1=2^1 第三行:1 2 1 1+2+1=2^2 第四行:1 3 3 1 1+3+3+1=2^3 第五行:1 4 6 4 1 1+4+6+4+1=2^4 第六行:1 5 10 10 5 1 1+5+10+10+5+1=2^5 ……


2.3 楊輝三角與二項(xiàng)式定理展開(kāi)式關(guān)系

二項(xiàng)式定理公式

二項(xiàng)式與楊輝三角的對(duì)應(yīng)關(guān)系:

二項(xiàng)式定理與楊輝三角形是一對(duì)天然的數(shù)形趣遇,它把數(shù)形結(jié)合帶進(jìn)了計(jì)算數(shù)學(xué)。求二項(xiàng)式展開(kāi)式系數(shù)的問(wèn)題,實(shí)際上是一種組合數(shù)的計(jì)算問(wèn)題。

  • 用系數(shù)通項(xiàng)公式來(lái)計(jì)算,稱(chēng)為“式算”
  • 用楊輝三角形來(lái)計(jì)算,稱(chēng)作“圖算”

3. 楊輝三角的應(yīng)用

最經(jīng)典的應(yīng)用是小時(shí)候玩的彈球游戲,這種題目類(lèi)再高中學(xué)習(xí)概率時(shí),大家肯定都遇到過(guò)。

彈球游戲

小球向容器內(nèi)跌落,碰到第一層擋物后向兩側(cè)跌落碰到第二層阻擋物,再向兩側(cè)跌落第三層阻擋物,如此一直下跌最終小球落入底層。根據(jù)具體地區(qū)獲的相應(yīng)的獎(jiǎng)品(AG區(qū)獎(jiǎng)品最好,BF區(qū)獎(jiǎng)品次之,CE區(qū)獎(jiǎng)品第三,D 區(qū)獎(jiǎng)品差)。


4. Java代碼實(shí)現(xiàn)楊輝三角

4.1 邏輯分析(用數(shù)組):

  • 1)既然知道楊輝三角的規(guī)律:從第三行開(kāi)始中間數(shù)是上一行斜對(duì)角的兩數(shù)之和
  • 2)那么我只需要想辦法存錯(cuò)上一行的數(shù)據(jù)即可,用于計(jì)算下一行中間的數(shù)值
  • 3)因?yàn)閺牡谌胁砰_(kāi)始出現(xiàn)上述規(guī)律,所以我們需要首先要存儲(chǔ)第二行的數(shù)據(jù),即k=2 - - k為存儲(chǔ)上一行數(shù)據(jù)的數(shù)組(若為集合就不需要考慮長(zhǎng)度變化的問(wèn)題了)
  • 4)每一行的長(zhǎng)度都在變化,所以k也需要變化,即k++

  • 備注:這里使用的是數(shù)組,使用集合會(huì)更簡(jiǎn)單


4.2 打印結(jié)果為直角三角形時(shí)

4.3 實(shí)現(xiàn)代碼

package 楊輝三角;/** 目的:Java代碼實(shí)現(xiàn)楊輝三角* * 邏輯分析(用數(shù)組):* 1)既然知道楊輝三角的規(guī)律:從第三行開(kāi)始中間數(shù)是上一行斜對(duì)角的兩數(shù)之和* 2)那么我只需要想辦法存錯(cuò)上一行的數(shù)據(jù)即可,用于計(jì)算下一行中間的數(shù)值* 3)因?yàn)閺牡谌胁砰_(kāi)始出現(xiàn)上述規(guī)律,所以我們需要首先要存儲(chǔ)第二行的數(shù)據(jù),即k=2----k為存儲(chǔ)上一行數(shù)據(jù)的數(shù)組(若為集合就不需要考慮長(zhǎng)度變化的問(wèn)題了)* 4)每一行的長(zhǎng)度都在變化,所以k也需要變化,即k++* * 備注:這里使用的是數(shù)組,使用集合會(huì)更簡(jiǎn)單*/ public class Test1 {public static void main(String[] args) {//1.創(chuàng)建存儲(chǔ)上一行數(shù)據(jù)的數(shù)組tempint k = 2;int[] temp = new int[k];//1.1 因?yàn)閮啥藬?shù)均為1,所以給第一個(gè)數(shù)temp[0]和最后一個(gè)數(shù)temp[k-1]賦值為1temp[0] = temp[k - 1] = 1;//2.打印楊輝三角//打印的行數(shù)--即楊輝三角行數(shù)rowCountint rowCount = 12;for (int i = 1; i <= rowCount; i++) {// 建立數(shù)組,存取當(dāng)前行數(shù)據(jù)int[] arr = new int[i];// 給當(dāng)前行數(shù)組賦值for (int j = 0; j < i; j++) {// 先給第一個(gè)和最后一個(gè)數(shù)賦值if (j == 0 || j == i - 1) {arr[j] = 1;} else {// 中間數(shù)為上一行斜對(duì)角的兩數(shù)之和arr[j] = temp[j - 1] + temp[j];}}// 給當(dāng)前行賦值完畢后讓k+1,增加數(shù)組長(zhǎng)度,用于存取當(dāng)前行的數(shù)據(jù)k++;temp = new int[k];// 打印當(dāng)前行數(shù)組,并給新temp賦值,便于下一行使用當(dāng)前行數(shù)據(jù)for (int y = 0; y < arr.length; y++) {temp[y] = arr[y];System.out.print(arr[y] + " ");}System.out.println();}} }

4.4 以下內(nèi)容僅供參考,可以不看

若想打印為等腰三角形,添加一個(gè)打印空格效果即可

for(int z=0;z<rowCount-i;z++){System.out.print(" ");}

完整代碼

package 楊輝三角;public class Test1 {public static void main(String[] args) {//1.創(chuàng)建存儲(chǔ)上一行數(shù)據(jù)的數(shù)組tempint k = 2;int[] temp = new int[k];//1.1 因?yàn)閮啥藬?shù)均為1,所以給第一個(gè)數(shù)temp[0]和最后一個(gè)數(shù)temp[k-1]賦值為1temp[0] = temp[k - 1] = 1;//2.打印楊輝三角//打印的行數(shù)--即楊輝三角行數(shù)rowCountint rowCount = 8;for (int i = 1; i <= rowCount; i++) {// 建立數(shù)組,存取當(dāng)前行數(shù)據(jù)int[] arr = new int[i];// 給當(dāng)前行數(shù)組賦值for (int j = 0; j < i; j++) {// 先給第一個(gè)和最后一個(gè)數(shù)賦值if (j == 0 || j == i - 1) {arr[j] = 1;} else {// 中間數(shù)為上一行斜對(duì)角的兩數(shù)之和arr[j] = temp[j - 1] + temp[j];}}// 給當(dāng)前行賦值完畢后讓k+1,增加數(shù)組長(zhǎng)度,用于存取當(dāng)前行的數(shù)據(jù)k++;temp = new int[k];//打印空格來(lái)實(shí)現(xiàn)等腰三角形 for(int z=0;z<rowCount-i;z++){System.out.print(" ");}// 打印當(dāng)前行數(shù)組,并給新temp賦值,便于下一行使用當(dāng)前行數(shù)據(jù)for (int y = 0; y < arr.length; y++) {temp[y] = arr[y];System.out.print(arr[y] + " ");}System.out.println();}} }

結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的算法--组合数学:杨辉三角数学分析以及Java实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。