2023年9月刊《程式設計師》演算法題之我見 思索之三

2021-05-07 23:10:48 字數 1646 閱讀 4901

本系列文章目錄

2009

年9月刊《程式設計師》演算法題之我見——思索之一

2009

年9月刊《程式設計師》演算法題之我見——思索之二

2009

年9月刊《程式設計師》演算法題之我見——思索之三

接上文「2023年9月刊《程式設計師》演算法題之我見——思索之二」

仔細分析後發現,似乎不能推導出乙個統一的公式來計算出大於三行的可能數。只能另闢蹊徑。

問題七:

m=15

,n=2

,p=s

,求方案總數

這個問題現在的解決方法如下

第一步:先得到每一行p=2s的方案數以及每乙個方案

第三步:初始化第一行的每一種可能,每一種的可能都計數為1。從第二行開始,通過查表,得知上一行的每乙個方案在這一行的相鄰方案是什麼,然後計數。隨著行數的增多,每種方案在每一行出現的可能數都會發生變化。

第四步:到最後一行,統計最後一行每一種方案的各自可能數。然後求總和。

經過測試,m=15,n=150,p=4的解為70種,和之前的問題五的答案一致。當m=15,n=4,p=2的解出乎我的意料,為

3328134

種。不知其他人的答案是否和我的一致,歡迎交流。

下面詳細分析每一步,並貼**,用的是vb2005函式

public

function cacuinternsitecount(byval line as

integer, byval siteperline as

integer, byval internperline as

integer) as

integer

line

表示行數

siteperline

表示每一排的座位數

internperline

表示每一排的實習生數

返回方案總數

先是變數定義:

都是臨時變數,後面再詳細介紹。

預備步:

在後面的第二步計算中,要將每乙個方案一拆二。而一拆二的依據就是利用組合原理,從2s中選出s的組合來,這個利用的組合函式,以及獲得組合的方法在詳細可以參見「遍歷組合的實現——

vb2005

」和「遍歷排列

的實現——

vb2005

」這兩篇文章。

第一步:

先得到每一行p=2s的方案數以及每乙個方案。這裡得到的每乙個方案也是呼叫組合函式。得到乙個組合再判斷這個組合是否符合題目的要求,用的是isok這個函式。

第二步:將每乙個方案一拆二,分為s和s。這表示這兩個方案使能夠相鄰的,將相鄰的可能壓入乙個表,用來備用。

這裡呼叫了

isok

函式,這是判斷實習生的位置是否符合題目的要求,**如下:

還有乙個注意的地方,很多人以為

vb2005

是沒有移位運算的,可其實是有的。這裡的

s1就是

2s的乙個組合,然後拆分為s2和

s3的s的組合。

第三步:初始化第一行的每一種可能,每一種的可能都計數為1。從第二行開始,通過查表,得知上一行的每乙個方案在這一行的相鄰方案是什麼,然後計數。隨著行數的增多,每種方案在沒一行出現的可能數都會發生變化。

最後一步統計:統計每一種情況出現的可能數,求總和,並返回。

2023年9月刊《程式設計師》演算法題之我見 思索之二

接上文 2009年9 月刊 程式設計師 演算法題之我見 思索之一 問題六 m 15 n 2 p s 求方案總數 每排s人,則兩排一共是 s s人。因此,現計算出 m 15 n 1 p 2s 的方案總數。對每乙個安排來說,一拆二,s人作為第一排的安排,s人作為第二排的安排。則有c s,2s 種 綜上所...

《程式設計師》2023年6月刊

摘要 移動開發工具就像梭羅手中的那柄斧,它不能帶給人對移動世界的超然頓悟,卻可以給你乙份恬淡的魄力讓你走向那片高聳入雲的白松。本期封面報道我們就來走進 移動開發工具 動畫框架 效能監控 實時資訊通訊等。移動開發工具就像梭羅手中的那柄斧,它不能帶給人對移動世界的超然頓悟,卻可以給你乙份恬淡的魄力讓你走...

我有三願(《程式設計師》2023年三月刊刊首語)

今年春節來得比較晚,感覺上,公曆三月倒成了一年的開始。既是歲末年初,少不得要做一番總結功夫 一年之計,大抵也該心裡有數,只待實行了。說大點,中國軟體界乃至it界在來年該向何處去,我和讀者諸君一樣,有些想法和願望。且道來 一願人人不浮躁,個個做實事。2006年技術人員流動量仍然巨大,我甚至見過一年內跳...