鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?———— 《算经》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
推荐阅读:循环