百钱买百鸡百钱买百鸡问题问题 优化的力量优化的力量 BlackRoseBlackRose 百度空间百度空间 问题来源问题来源 中国古代数学家张丘建在他的 算经 中提出了著名的 百钱买百鸡问题 鸡翁一 值钱五 鸡母一 值钱三 鸡雏三 值钱一 百钱买百鸡 问翁 母 雏各几何 基本思想基本思想 利用计算机来解决 百钱买百鸡问题 是程序设计语言中的一个经典的例子 百钱买百鸡问题 的解决 基本思想是采用穷举法 即列举各种可能的买鸡情况 从中选出鸡的总数为 100 只且买鸡的钱也刚好是 100 元的公鸡 母鸡和小鸡数 但是采用不同的思路 可以得到不同的算法 其效率也不尽相同 下面我们用不同的方法来求解这个简单的问题并分析各自的效率 设公鸡 x 母鸡 y 小鸡 z 则必须有 x y z 100 5 x 3 y z 3 100 方法一方法一 简单的理由 x y z 的范围构造三重 for 循环 1 x 19 1 y 32 3 y 98 且整除 3 void hectoMC size t x y z for x 1 x 19 x for y 1 y 32 y for z 3 z 96 z 3 if x y z 100 方法方法二二 利用两重循环 将 x y z 100 带入到第二个方程中化简可得 7 x 4 y 100 void hectoMC 2 size t x y for x 1 x 19 x 要习惯 for 循环中的前置 for y 1 y 32 y if 7 x 4 y 100 cout x x y y z 100 x y endl 方法方法三三 将原三元一次方程组中的变量 x 看着常数 则 y z 可以用 x 表示 y 25 7 x 4 z 75 3 x 4 void hectoMC 3 size t x y z for x 4 x0 可以肯定 y 25 32 所有 y 32 这个条件不需要 根据 4 x 12 则 z 75 3 x 4 75 9 84 96 因此第三个条件 z 96 也不需 要判断 因此我们的终极程序就是 void hectoMC 4 size t x for x 4 x 12 x 4 cout x x y 25 7 x 4 z 75 3 x 4 endl 其实只有三个取值 你完全可以不用 for 循环直接输出结果 后续时间复杂度什 么的分析就不分析了 根据程序一目了然 虽然程序很简单 但是我们可以从中知道任何程序都是可以不断被优化的 优化的力量是无穷的
展开阅读全文