最近独到一篇关于"百钱买百鸡"的Python编程,觉得挺有意思,索性自己改写一下优化算法。
原题目:
# 我国古代数据加张邱建在《算经》中提出一个著名的数序为问题:
# 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问
# 鸡翁,鸡母,鸡雏几何?
分析:
1、这个题目其实重点并不是编程,看过很多人对这个编程最少套用了3层循环。
2、其实这道题一层循环即可搞定。有很多考试也会用到这道题,可以善存。
解题思路:重点在解方程
# 1、设鸡翁=x,鸡母=y,鸡雏=z
# 2、数量的关系:x + y + z = 100(只) ①
# 3、钱的关系:5x + 3y + z/3 = 100 (钱) ②
# 4、解方程:
# 第一步:方程② × 3 = 15x + 9y + z = 300 ③
# 第二步:③ - ① :14x + 8y = 200;
# 第三步: 化简一下:7x + 4y = 100;
# 第四步:移项 = y = (100 - 7x)/4
# 所以:x只能是4的倍数,因为不能为小数,当然,如果题目变更,也就是是某个数的倍数即可。也就是你会找到循环的增倍关系。
因此:一次性循环即可搞定,下面用Python的编码来解决这个问题
1 count = 1
2 for i in range(0, 100, 4): # 四的倍数
3 x = i
4 y = int((100 - 7*x)/4)
5 z = int(100 - x - y)
6 if x + y + z == 100 and x*y*z >=0 : # 买够100值打印结果,且不能等于0
7 print("第{0}种够买情况:鸡翁{1}只,鸡母{2}只,鸡雏{3}只".format(count,x,y,z))
8 count = count + 1
运行结果:
第1种够买情况:鸡翁0只,鸡母25只,鸡雏75只
第2种够买情况:鸡翁4只,鸡母18只,鸡雏78只
第3种够买情况:鸡翁8只,鸡母11只,鸡雏81只
第4种够买情况:鸡翁12只,鸡母4只,鸡雏84只
注意点:切记算出的结果只能为整数且不能为0,这个不要忘记了
时海涛|Thomas