1. 程式人生 > >Python 練習(22)-易

Python 練習(22)-易

問題描述

我國古代數學家張丘建在《張丘建算經》一書中提出了“百雞問題”:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?這個問題的大致意思是這樣的:公雞5文錢一隻,母雞3文錢一隻,小雞3只一文錢。
如果用100文錢買100只雞,那麼公雞、母雞和小雞各應該買多少隻呢?

分析:
三個未知數,兩個方程。找到其中兩個未知數的等量關係,遍歷一個未知數,找到符合條件的組合。

程式碼

for i in range(1,100):
    if (200-8*i)%14==0 and (200-8*i)/14>0: #如果整除且大於零,則滿足條件
        print '小雞%d,母雞%d,公雞%d'%((200-8*i)/14,i,100-i-(200-8*i)/14)

上述解法是列方程,找到了母雞和公雞數的等量關係,即公雞= (200-8*i)/14。然後以母雞為變數,遍歷,找到整除的即為公雞數。
但這樣需要遍歷的次數較多。因為小雞數量一定是3的倍數,如果以小雞為變數遍歷的次數會大大減小,是上述演算法的1/3,所以改進為小雞和母雞的等量關係並遍歷小雞的數量。

for i in range(0,100,3):
    if (600-7*i)%3==0 and (600-7*i)/3>0 and 100-i-(600-7*i)/3>0:
        print '小雞%d,母雞%d,公雞%d'%(i,(600-7*i)/3,100-i-(600-7*i)/3)

#結果
小雞78,母雞18,公雞4
小雞81,母雞11,公雞8
小雞84,母雞4,公雞12