雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?———— 《算經》python
前提:100只雞 + 100塊錢,100塊錢須所有用完。算法
設購買公雞、母雞、小雞的數量分別爲x、y、z,則題目可轉化爲三元二次方程組。app
x + y + z = 1005*x + 3*y + z/3 = 100ide
由題意可知x、y、z的範圍分別爲[0, 20]、[0, 33]、[0, 100]。code
分析到這裏,不難寫出以下代碼。get
def solution(): ans = [] for x in range(20): for y in range(33): for z in range(100): r1 = x + y + z == 100 r2 = 5*x + 3*y + z/3 == 100 if r1 and r2: ans.append([x, y, z]) return ans # [[0, 25, 75], [3, 20, 77], [4, 18, 78], [7, 13, 80], [8, 11, 81], [11, 6, 83], [12, 4, 84]]
可是經過分析代碼,不難發如今程序中咱們沒有必要進行三層循環。數學
將三元二次方程組轉換爲二元一次方程,因爲z的範圍較大,咱們選擇枚舉x、y的值。io
def solution(): ans = [] for x in range(20): for y in range(33): z = 100 - x - y if 5*x + 3*y + z/3 == 100: ans.append([x, y, z]) return ans # [[0, 25, 75], [3, 20, 77], [4, 18, 78], [7, 13, 80], [8, 11, 81], [11, 6, 83], [12, 4, 84]]
百雞百錢問題到此就成功解決了,由上述分析咱們能夠得出枚舉算法的流程。class
推薦閱讀:循環