最近独到一篇关于"百钱买百鸡"的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