问题:
          一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问N年后共有牛多少只?

1.原始笨方法

private int Comput(int years)
        {
            //初始化为1头牛
            int count = 1;
            if (years < 4)
          {
                return count;
            }
            
            while (years - 3 > 0)
            {
                count = count + Comput(years - 3);
                years--;
            }
            return count;


        }

特点:容易理解,不过效率太低.不具有实用价值.

2.采用HashTable优化方案

Hashtable table = new Hashtable();
        public long Compute(int years)
        {
            //初始化为1头牛
            long count = 1;
            if (years <= 3)
          {
                return count;
            }
            int i = 4;
            while (i <= years)
            {
                int subYears = i - 3;
                if (table.ContainsKey(subYears))
              {
                    count = (long)table[subYears];
                }
                else
              {
                    count += Compute((int)(subYears));
                }
                if (!table.ContainsKey(subYears))
              {
                    table.Add(subYears, count);
                }
                i++;
            }
            return (long)count;
        }

特点:在第一种方案的基础上性能有了大幅度的提高.采用HashTable存储老牛的生育曲线,从而达到以后的小牛重复利用老牛的生育曲线.(直接取其生产数量)

3.采用数组的方式描述

public int Compute(int years)
        {
          int[] age = new int[4] { 1, 0, 0, 0 };
            for (int i = 2; i <= years; i++)
            {
                age[3] += age[2];              age[2] = age[1]; 
                age[1] = age[0];
                age[0] = age[3];                 

            }
            return (age[0] + age[1] + age[2] + age[3]);
        }

特点:只采用一个循环搞定,效率极高.

3.采用优化递归公式实现
 f(n)   =   f(n-1)+f(n-3)  [n   >   3]   
 f(n)   =   1                   [0   <   n   <=   3]

public int Comput(int x)
      {
            if (x < 4) return 1;
            else return Comput(x - 1) + Comput(x - 3);
        }   

特点:代码简洁,功能简单实现,但使用递归当然会牺牲一定的效率作为代价.

前些天在网络上偶然发现的生产小牛问题.于是搜集整理了一下,方便大家共同研究学习使用.
有好的算法大家共同研究^_^

转载于:https://www.cnblogs.com/symbol441/archive/2008/02/19/1073291.html

小牛生产小牛的问题解决集粹相关推荐

  1. (山理工 1243)母牛问题(大牛生小牛,小牛生。。。。)

    问题描述 有一对夫妇买了一头母牛,它从第2年起每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? 输入 输入数据由多个测试实例组成,每 ...

  2. C语言 母牛生小牛问题 多组测试数据

    题目描述: 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? 输入: 输入数据由多个测试实例组成,每个测试实例占一行, ...

  3. 一头小牛,小牛成长到第四年开始,会每年生一头小牛,N年后共有多少头牛

    方法一:面向对象 public class Cow {/* * 一个农夫,买了一头小牛,这头小牛成长到第四年开始,会每年生一头小牛,* 所出生的小牛成长到第四年开始,也会每年生一头小牛,请问N年后,农 ...

  4. 小牛电动的软文列表,和实际用户的反馈实在是天上地下。。

    2019独角兽企业重金招聘Python工程师标准>>> 搜狐汽车: <个人电动交通工具通勤日记-小牛 N1 电动踏板车> http://auto.sohu.com/201 ...

  5. 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛,n年后有多少头小牛

    1 题目描述 一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛. 假设每次生的都是母牛,并且也遵守4年才生育并生母牛的原则.且所生的牛都不会死 问20年之后共有多少头牛 ...

  6. 母牛2年生小牛 5年后并死去的算法

    同事提出一个问题,关于牛生小牛的算法,之前的牛生小牛的算法都是假设牛不死的情况下的,几年生一头,若干年后还有多少头,这个算法是有些变化的. 农场第一年有一头牛,假设这头牛每2年生一次小牛,小牛迅速长大 ...

  7. 两轮电自2.0时代开启 小牛电动以独立主见创造新物种

    在越来越多消费者追求个性化和多元化的今天,什么样的两轮电自才有可能成为热销爆品?作为全球领先的智能城市出行解决方案提供商,小牛电动针对这个问题给出了自己的答案. 8月2日,小牛电动正式发布全场景跨界机 ...

  8. 一份来自大厂算法工程师的求职宝典

    作者 | 我生有涯愿无尽 来源 | 海边的拾遗者(ID:gh_cdf18657e25d) 转眼在京东已经入职大约两个星期了,但找工作的时光仿佛就在昨日.盲目投简历,疯狂做笔试,流水般面试的日子.秋招是 ...

  9. 最小可行产品是什么_无论如何,“最小可行产品”到底意味着什么?

    最小可行产品是什么 by Ravi Vadrevu 通过拉维·瓦德雷武(Ravi Vadrevu) 无论如何,"最小可行产品"实际上是什么意思? (What does " ...

最新文章

  1. 大数据统计分析毕业设计_基于大数据分析的电子信息类专业毕业设计成绩影响因素研究...
  2. 手写自己的MyBatis框架-V2.0参数处理
  3. HDU - 4569 Special equations(同余模定理)
  4. bat 批处理获取时间语法格式
  5. 利用Excel导入数据到SAP C4C
  6. html控制浏览器宽度和高度,html – 设置电子邮件和浏览器的tr和td宽度和高度
  7. 从L1 loss到EIoU loss,目标检测边框回归的损失函数一览
  8. C语言和设计模式(观察者模式)
  9. 在anaconda python开发套件下进行opencv的安装
  10. 通过ssh访问git项目
  11. 修改Chrome的User Agent的方法 真实有效
  12. ActiveMQ的下载安装与操作示例
  13. 安装ps提示重新启动计算机,安装Service Pack或执行DCPROMO后,出现错误或服务器重新启动 - Product Support Quick Note (PSQN) - 276184...
  14. 解决Postman报错Could not send request
  15. HTTP 出现304情况及详解
  16. 北京政协委员共商提高城市精治、共治、法治水平
  17. POJ 3322 BFS
  18. 计算机网络原理第七章——Internet 原理
  19. linux类似的vlookup函数,VLOOKUP函数的使用方法介绍 VLOOKUP函数的操作实例
  20. linux下载安装tree命令

热门文章

  1. 数字图像处理:(4)二阶微分在数字图像处理中的应用
  2. 力扣(LeetCode)刷题,简单题(第16期)
  3. Mat矩阵基本操作与示例 OpenCV
  4. 单文件浏览器_图文并茂深度解析浏览器渲染原理,包看懂超值得收藏
  5. PCL_common模块api代码解析
  6. 剑指offer:面试题35. 复杂链表的复制
  7. Udacity机器人软件工程师课程笔记(一)-样本搜索和找回-基于漫游者号模拟器
  8. Angualr设置自定义管道Pipe(类似Vue的过滤器filters)货币格式化(实现内置管道CurrencyPipe的功能)
  9. 连接远程服务器CredSSP加密Oracle修正报错解决办法
  10. 在CentOS 6.6 64bit上安装Oracle VirtualBox 5.0.12