一、问题提出:
百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”
二、编程求解:
1.在不甚思考的情况下(每种鸡都可能有0-100只)凭直觉写出蛮力法求解百鸡问题的基本思路并编程实现。
利用三个for循环,每个循环内写出a,b,c的取值范围,在这个范围内依次取值,直到取到的值符合if条件里的等式和范围,便输出所有符合条件的值,直到结束循环。
运行结果为:
2.进一步优化算法,将算法的复杂度降到最低。
将上面那个代码中的两个for循环转换为等式的形式,这样不仅写起来简便还可以降低算法的复杂度,优化算法。只需要进行一个for循环,使a从0开始逐一输入,符合下面的等式和if里的条件的,便输出符合条件的数值,从0开始每次加1,试到20,符合条件的输出,直到结束循环。
输出结果为:
三、两种算法时间复杂度比较。
在原有代码的基础上,添加上计算时间的代码,就可以给代码运行计算时间。
由于百钱百鸡数太小,两种方法计算出的时间都为1,看不出差别。所以我们把数设的大一些,不妨设1000钱1000鸡。
(1)3个for循环计算出的时间结果为:
所用时间为134。
(2)一个for循环计算出的时间结果为:
所用时间为12。
由此可见,1个for循环时间复杂度更低,所用时间最少。
四、总结
这是关于百钱百鸡的C++语言求解方法,还有关于两种方法时间复杂度的比较及算法优化。如果有什么不对的地方欢迎大家指正!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)