今天分析一道藍(lán)橋杯大賽Python組的真題《核桃的數(shù)量》。
題目?jī)?nèi)容:小張是軟件項(xiàng)目經(jīng)理,他帶領(lǐng)3個(gè)開(kāi)發(fā)組。工期緊,今天都在加班。為鼓舞士氣,小張打算給每個(gè)組發(fā)一袋核桃(據(jù)傳言核桃能補(bǔ)腦)。他的要求是:
1.各組的核桃數(shù)量必須相同
2.各組內(nèi)必須能平分核桃(當(dāng)然是不能打碎的)
3.盡量提供滿足1,2條件的最小數(shù)量(節(jié)約鬧革命嘛)
用戶輸入三個(gè)正整數(shù)a,b,c分別表示每組正在加班的人數(shù),中間用空格分隔開(kāi)來(lái)(a,b,c<30),根據(jù)用戶輸入的數(shù)字系統(tǒng)自動(dòng)顯示每袋核桃的數(shù)量。
題目分析:當(dāng)三組人數(shù)確定時(shí)每袋核桃的數(shù)量就是三組人數(shù)的最小公倍數(shù)。
算法分析:一般我們遇到的題目都是求已知兩個(gè)數(shù)字的最小公倍數(shù),現(xiàn)在需要計(jì)算三個(gè)數(shù)的最小公倍數(shù)。算法較多,比如分解質(zhì)因數(shù)、公式法和枚舉法。枚舉法最簡(jiǎn)單也是最適合計(jì)算機(jī)使用,今天用Python編寫(xiě)枚舉法的程序來(lái)計(jì)算核桃的數(shù)量。
首先用Python內(nèi)置函數(shù)map(function,iterable...)輸入三個(gè)開(kāi)發(fā)組的人數(shù)并存入變量a,b,c中。在內(nèi)置函數(shù)中function代表函數(shù)名,iterable代表一個(gè)或者多個(gè)序列,輸入數(shù)字中間要用空格隔開(kāi)。
采用枚舉算法,設(shè)核桃初始數(shù)量num等于1,并且設(shè)置一個(gè)T用來(lái)控制While的循環(huán)條件;默認(rèn)T為T(mén)rue。程序運(yùn)行后進(jìn)入While循環(huán)進(jìn)行判斷,當(dāng)num能同時(shí)整除a,b,c時(shí),T為False結(jié)束循環(huán),否則核桃數(shù)量num加一,直到計(jì)算出最后的結(jié)果,程序參考如圖。
另外請(qǐng)您用分解質(zhì)因數(shù)法和公式法求最小公倍數(shù)的方法編寫(xiě)程序。