Python實現百錢買百雞

2021-10-19 11:21:23 字數 964 閱讀 5687

《算經》中有一道很有趣的數學題:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?

轉化為數學語言,也就是我們要找到三個不大於100的非負整數x,y,z,滿足x+y+z=100,並且5x+3y+z/3=100.

很容易想到使用巢狀的for迴圈來搜尋合適的三個變數。**如下:

for rooster in range(101):

for hen in range(101):

for chick in range(101):

if rooster + hen + chick == 100 and rooster*5 + hen*3 + chick/3 == 100:

print(f'公雞只,母雞只,雞雛只。 ')

但是,上述**的效率實在是不高。完成上述的搜尋,程式重複執行了了1030301次。

可以從兩個角度入手優化上述**:

1. 三種雞的數量一共是100只,雞雛的數量可以用100減去公雞和母雞的數量,這樣就可以省掉乙個變數,繼而省掉一層迴圈,大大地提高了效率。

2. 受**的限制,每種雞的購買數量有乙個更低的上限。比如公雞一只要5錢,那麼100錢最多只能買20只公雞,根本達不到100只。我們上面設定的上限過於粗略,存在浪費。

優化後的**如下:

for rooster in range(21):

for hen in range(34):

if rooster*5 + hen*3 + (100-rooster-hen)/3 == 100:

print(f'公雞只,母雞只,雞雛只。 ')

優化後,完成搜尋只需要重複執行714次。

得到的答案如下:

公雞0只,母雞25只,雞雛75只。

公雞4只,母雞18只,雞雛78只。

公雞8只,母雞11只,雞雛81只。

公雞12只,母雞4只,雞雛84只。

Python 百錢買百雞

某人有100元錢,買100隻雞。公雞5元乙隻,母雞3元乙隻,小雞1元三隻。問 可以買公雞 母雞 小雞各多少只。使用窮舉法,把每一種可能都試一遍,得到最後正確的結果。若公雞為x只,母雞為y只,小雞為z只 我們將得到公式 5x 3y z 3 100 並且 x y z 100 小雞數除以3的餘數必須是0 ...

百錢買百雞

這是個很簡單的邏輯,本來沒有什麼太多值得分享的。並且實現程式網上隨處可見,鄙人也並未提出更高深的意見。在閒暇看書時,對比了以下兩種實現。發現,其 實數學計算的不定性,可利用計算機的不斷重複 篩選 得到想要結果 如第一種實現 但是,顯而易見的是,第一種實現有個複雜度的問題。而第二種實現,是在數學計算推...

百錢買百雞

百錢買百雞。中國古代數學家張丘建在他的 算經 中提出了著名的 百錢買百雞 問題 雞翁一,值錢五 雞母一,值錢三 雞雛三,值錢一 百錢買百雞,翁 cock 母 hen 雛 chick 各幾何?include int main int cock,hen,chick printf cock t,hen t...