本系列文章目錄
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年技術人員流動量仍然巨大,我甚至見過一年內跳...