《算經(jīng)》中的百錢買百雞問題,你會做嗎?試下看看(39)

小朋友們好,大朋友們好!

我是貓妹,一名愛上Python編程的小學(xué)生。

歡迎和貓妹一起,趣味學(xué)Python。

今日主題

你知道我國歷史上有個王朝叫北魏嗎?

北魏(386年—534年),南北朝時期北朝的第一王朝。

也稱“后魏”“拓跋魏”“元魏”,鮮卑族拓跋氏所建,傳12帝(列入正史帝紀者)?

你知道北魏王朝有個著名的數(shù)學(xué)家叫張丘建嗎?

他從小聰明好學(xué),酷愛算術(shù)。

一生從事數(shù)學(xué)研究,造詣很深。

“百雞問題”是中古時期,關(guān)于不定方程正整數(shù)解的典型問題,邱建對此有精湛和獨到的見解。

著有《張邱建算經(jīng)》3卷。后世學(xué)者北周甄鸞、唐李淳風相繼為該書作了注釋。劉孝孫為算經(jīng)撰了細草。

算經(jīng)的體例為問答式,條理精密,文詞古雅,是中國古代數(shù)學(xué)史上的杰作,也是世界數(shù)學(xué)資料庫中的一份遺產(chǎn)。

你知道張丘建的代表作《算經(jīng)》嗎?

你知道《算經(jīng)》中有個著名的數(shù)學(xué)問題叫百雞百錢嗎?

雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?

公雞5文錢一只,母雞3文錢一只,小雞3只一文錢。用100文錢,買100只雞。問公雞、母雞、小雞各多少只?

方程解法

如果上了初中,應(yīng)該會學(xué)到方程,這個問題可以用方法來求解。

未知數(shù)稱為元,未知數(shù)的冪稱為次。

假設(shè)公雞、母雞、小雞分別為x、y、z只。

由題可得以下方程:

① x+y+z=100 (雞的總數(shù)量為100只)

② 5x+3y+1/3z=100 (雞的總價格為100文)

根據(jù)以上方程,可以得到以下解:

7x+4y=100

本質(zhì)上是二元一次方程的整數(shù)解問題。

x大于等于0,小于等于20

y大于等于0,小于等于33

x=(100-4y)/7

y=(100-7x)/4

化簡得x<=14 y<=25,然后x依次0~14逐一取值計算進行驗證判斷即可。


二元一次方程的整數(shù)解屬于初中數(shù)學(xué)問題:


答案是3組

Python遍歷解法

在Python編程中,通過窮舉法的方式找出所有解法。

枚舉公雞的數(shù)量x=0~20,步長為1。

在枚舉公雞數(shù)量x的前提下,枚舉母雞的數(shù)量y=0~33,步長為1。

根據(jù)x和y的值,計算出小雞的數(shù)量z=100-x-y。

判斷當前三種雞的數(shù)量是否符合條件,即5x+3y+z/3=100,如果符合,則輸出當前解法。

for x in range(0, 21):

? ? for y in range(0, 34):

? ? ? ? z = 100 - x - y

? ? ? ? if 5*x + 3*y + z/3 == 100:

? ? ? ? ? ? print("公雞:%d只,母雞:%d只,小雞:%d只" % (x, y, z))

公雞:0只,母雞:25只,小雞:75只

公雞:4只,母雞:18只,小雞:78只

公雞:8只,母雞:11只,小雞:81只

公雞:12只,母雞:4只,小雞:84只

程序用了兩層循環(huán),其實還可以用一層循環(huán),此時理解起來稍微麻煩些,但是運行效率會更高效一些。

for x in range(0, 21):

? ? y = 25 - 7*x/4

? ? z = 75 + 3*x/4

? ? if x%4==0 and y >=0:

? ? ? ? print("公雞:%d只,母雞:%d只,小雞:%d只" % (x, y, z))

公雞:0只,母雞:25只,小雞:75只

公雞:4只,母雞:18只,小雞:78只

公雞:8只,母雞:11只,小雞:81只

公雞:12只,母雞:4只,小雞:84只

窮舉法

所謂窮舉法,從可能得解的集合中一一枚舉各元素,用題目給定的檢驗條件判定哪些是無用的,哪些是有用的。

由于窮舉法需要遍歷所有元素,因此它的時間性能往往是最低的,指數(shù)級的時間開銷往往都是采用窮舉帶來的,但是它依舊是很重要的算法設(shè)計思想。理論上,窮舉法可以解決許多計算領(lǐng)域的問題(只要機器性能足夠或者時間開銷可承受)。

百錢買百雞問題是一道經(jīng)典的數(shù)學(xué)問題,通過方程解法和編程解法,可以找出所有符合條件的解法。

方程解法適用于小規(guī)模的問題,對于大規(guī)模的問題,可以使用編程解法進行計算。

編程解法使用窮舉的方式,可以找出所有解法,但計算量較大,需要耗費一定時間和計算資源。

對于現(xiàn)在的計算機來說,這都不是事兒!

好了,我們今天就學(xué)到這里吧!

如果遇到什么問題,咱們多多交流,共同解決。

我是貓妹,咱們下次見!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容