C++语言求百鸡问题

一、问题提出:

百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”

二、编程求解:

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++语言求解方法,还有关于两种方法时间复杂度的比较及算法优化。如果有什么不对的地方欢迎大家指正!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值