現有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語言解決百錢買百雞問題
我國古代數學家張丘建在 算經 一書中曾提出過著名的 百錢買百雞 問題,該問題敘述如下 雞翁一,值錢五 雞母一,值錢三 雞雛三,值錢一 百錢買百雞,則翁 母 雛各幾何?翻譯過來,意思是公雞乙個五塊錢,母雞乙個三塊錢,小雞三個一塊錢,現在要用一百塊錢買一百隻雞,問公雞 母雞 小雞各多少只?題目分析 如果...
百錢買百雞
這是個很簡單的邏輯,本來沒有什麼太多值得分享的。並且實現程式網上隨處可見,鄙人也並未提出更高深的意見。在閒暇看書時,對比了以下兩種實現。發現,其 實數學計算的不定性,可利用計算機的不斷重複 篩選 得到想要結果 如第一種實現 但是,顯而易見的是,第一種實現有個複雜度的問題。而第二種實現,是在數學計算推...