python解決百錢買百雞

2022-05-10 04:17:50 字數 2887 閱讀 1954

現有100錢,公雞5文錢乙隻,母雞3文錢乙隻,小雞一文錢3只

要求:公雞、母雞,小雞都要有,把100文錢花完,買的雞的數量正好是100。

問:一共能買多少只公雞,多少只母雞,多少只小雞?

窮舉法:

方案一:

思路:第一重迴圈公雞從1只迴圈到100只

第二重迴圈母雞從1只迴圈到100只

第三重迴圈小雞從1只迴圈到100只

然後進行判斷:

數量:公雞+母雞+小雞 =100

錢:公雞5+母雞3+小雞 =100

輸出滿足條件的情況

**如下:

for cock in

range(1

,101):

# 公雞

for hen in

range(1

,101):

#母雞for chick in

range(1

,101):

#小雞if cock *

5+ hen *

3+ chick ==

100:

if cock + hen + chick *3==

100:

print

("公雞有%d只\t母雞有%d只\t小雞有%d只"

%(cock,hen,chick *3)

)

輸出:

公雞有4只 母雞有18只 小雞有78只

公雞有8只 母雞有11只 小雞有81只

公雞有12只 母雞有4只 小雞有84只

雖然能求出結果,但仔細一想,用了三重迴圈,每重迴圈要執行100次,三重就是100100100,太耗時間了,能不能有一種更好的解決方法呢?

方案二:

思路:買了乙隻公雞,花掉5錢,還剩下100 - 5 = 95 錢,買母雞和小雞的錢只有95錢,而不是100錢。再買乙隻母雞,還剩下100- 5 - 3 = 92錢,那麼買小雞的錢只有92錢…所以每重循壞次數不再是固定的100,而是變化的。

第一重 cock:100 / 5 = 20 次

第二重 hen:(100 - cock) / 3次

第三重:100 - cock -hen 次

**如下:

for cock in

range(5

,101,5

):# 公雞

for hen in

range(3

,101

- cock,3)

:#母雞

for chick in

range(1

,101

- cock - hen)

:#小雞

if cock //

5+ hen //

3+ chick *3==

100and cock + hen + chick ==

100:

print

("公雞有%d只\t母雞有%d只\t小雞有%d只"

%(cock //

5, hen //

3, chick *3)

)

下面做乙個時間對比:

import time

start = time.clock(

)for cock in

range(1

,101):

# 公雞

for hen in

range(1

,101):

#母雞for chick in

range(1

,101):

#小雞if cock *

5+ hen *

3+ chick ==

100and cock + hen + chick *3==

100:

pass

end = time.clock(

)time1 = end - start

print

("方案一所花時間"

,time1)

start = time.clock(

)for cock in

range(5

,101,5

):# 公雞

for hen in

range(3

,101

- cock,3)

:#母雞

for chick in

range(1

,101

- cock - hen)

:#小雞

if cock //

5+ hen //

3+ chick *3==

100and cock + hen + chick ==

100:

pass

end = time.clock(

)time2 = end - start

print

("方案二所花時間"

,time2)

print

("方案一所花時間是方案二的%d倍"

%(time1 // time2)

)

輸出:

方案一所花時間 0.32884016429388524

方案二所花時間 0.0030011999201297046

方案一所花時間是方案二的109倍

經過多次測試,方案一所花時間差不多是方案二的100倍

這個小小的程式可以說明演算法的重要性,用不同的演算法,時間複雜度是不一樣的。在實現乙個功能的基礎上,還要兼顧效率的問題。

當然這個題目還可以用求不定方程整數解的辦法來解決,這個演算法用時會更短。

關注我,我們一起成長~~

Python 百錢買百雞

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

python解百錢買百雞 C語言解決百錢買百雞問題

我國古代數學家張丘建在 算經 一書中曾提出過著名的 百錢買百雞 問題,該問題敘述如下 雞翁一,值錢五 雞母一,值錢三 雞雛三,值錢一 百錢買百雞,則翁 母 雛各幾何?翻譯過來,意思是公雞乙個五塊錢,母雞乙個三塊錢,小雞三個一塊錢,現在要用一百塊錢買一百隻雞,問公雞 母雞 小雞各多少只?題目分析 如果...

百錢買百雞

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