经典的算法题:牛的问题

 这是昨天在csdn论坛上看到的一道题,觉得比较经典,这里把自己的几种做法写出来。

 

 问题大概:

 

 假设有一种牛,3岁成年,成年后具备自交能力,也就是说不用公牛帮忙,每年可以生产出一只同种类的牛,问如果一个农场有1只该品种0岁的 牛,不考虑牛的寿命问题,那么10年后农场总共 有多少只牛?

 

 

说明:

其实原问题没有这么复杂,但是考虑到一些不必要的争议,所以加了不少题设。从题面上看,头两年第一只牛只能孤独的度过,到了第三年开始,牛会诞下第一个孩子,接下来的每一年都会继续生育,而生下来的孩子三岁成年后也会加入生育大军,孩子的孩子也会陆续具备生育能力。。。

 

结果:

 

 

 算法:

  1.回溯算法实现:

    

 

 

   2.利用数组作为辅助结构的解法(三种解法中最高效):

 

 

  3.面向对象的解法:

 

 (1)牛的类

   

 

  (2)产牛流程

  

 

测试代码:

总结:

据测试,以上三种方法中,数组实现的方法是最高效率的,其空间复杂度为O(1),而时间复杂度为O(N),在效率上,是其他两种方法不可比拟的,其次是回溯法的解法,从逻辑设计上,面向对象的解法是最容易理解的。这道题相信还存在着多种更优秀解题思路,如果从数学角度上进行分析归纳,或许还有效率更优的算法,有待日后探究,如有更好的思路,望不吝赐教!

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值