当前位置: 首页 > 编程日记 > 正文

小牛生产小牛的问题解决集粹

问题:
          一只刚出生的小牛,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[41000 };
            
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 < 4return 1;
            
else return Comput(x - 1+ Comput(x - 3);
        }
   

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

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

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

相关文章:

构建基于Chromium的应用程序(Winform程序加载Html页面)

chromium是google chrome浏览器所采用的内核&#xff0c;最开始由苹果的webkit发展而出&#xff0c;由于webkit在发展上存在分歧&#xff0c;而google希望在开发上有更大的自由度&#xff0c;2013年google决定自己开发webcore的分支&#xff0c;叫做Blink引擎&#xff0c;而后g…

机器就能绘制这样的作品,你还去写生吗?(续)

本文介绍了利用程序让计算机把输入图像呈现铅笔素描画和彩绘画效果的算法原理。

Apache工具类ToStringBuilder用法简介

ToStringBuilder比较适合在打日志时&#xff0c;输出参数的信息&#xff0c;特别是在参数为对象时&#xff0c;该工具类能够很方便的自动打印对象中的属性值。 package test; /** * * author zhengtian * time 2012-6-28 */ public class User { privat…

自然语言处理:汉语分词

NLPIR/ICTCLAS 汉语分词系统&#xff08;http://ictclas.nlpir.org&#xff09;PyNLPIR 是该汉语分词系统的 python 封装版&#xff08;http://pynlpir.readthedocs.io...&#xff09; 安装步骤&#xff1a;① pip install pynlpir② pynlpir update 官方文档的汉语分词示例&am…

再也不买仙剑正版盘了

奶奶的&#xff0c;好不容易心血来潮买了一回&#xff0c;windows 2003安装上蓝屏&#xff0c;在xp虚拟机上装报错&#xff0c;狗日的大宇&#xff0c;以后专门玩盗版气它 转载于:https://www.cnblogs.com/charie/archive/2008/02/21/1076772.html

利用BP神经网络教计算机进行非线函数拟合(代码部分单层)

单层BP神经网络 本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54425751

ps aux|grep

ps a 显示现行终端机下的所有程序&#xff0c;包括其他用户的程序。 2&#xff09;ps -A 显示所有程序。 3&#xff09;ps c 列出程序时&#xff0c;显示每个程序真正的指令名称&#xff0c;而不包含路径&#xff0c;参数或常驻服务的标示。 4&#xff09;ps -e 此参数的效果…

排序(一)归并、快排、优先队列等(图文具体解释)

排序(一) 0基础排序算法 选择排序 思想&#xff1a;首先&#xff0c;找到数组中最小的那个元素。其次&#xff0c;将它和数组的第一个元素交换位置。再次。在剩下的元素中找到最小的元素。将它与数组的第二个元素交换位置。如此往复&#xff0c;直到将整个数组排序。 【图例】 …

利用BP神经网络教计算机进行非线函数拟合(代码部分多层)

利用BP神经网络教计算机进行非线函数拟合&#xff08;代码部分多层&#xff09; 本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54425751

年年英雄会,岁岁侠客行

虽然今年工作比较忙&#xff0c;但还是坚持参加了CSDN组织的英雄会第二届。如去年所约&#xff0c;CSDN在持续发展着&#xff0c;而英雄会这一中国独特的程序员式的聚会&#xff0c;胜利地举办了第二届。 虽然不能成为MVB&#xff0c;但还是感谢CSDN记得发给我邀请。这份情意还…

Velocity判断空的方法

Velocity中没有null&#xff0c;那么怎么判断null呢 1、在velocity中&#xff0c;非null被认为是真的&#xff0c;所以&#xff0c;可以如下用&#xff1a; #if($!变量名)// 变量不为空的代码 #else// 变量为空的代码 #end

js对Dom操作

<div id"myWebPanelForm"style"width:400;height:200;display:none"><div id"WebPanel_Body"style"width:400;height:200;display:none">测试</div></div><script type"text/javascript">win…

利用BP神经网络教计算机进行非线函数拟合

利用BP神经网络教计算机进行非线函数拟合 本图文已经更新&#xff0c;详细地址如下&#xff1a; http://blog.csdn.net/lsgo_myp/article/details/54425751

phpstorm failed to create jvm:error code -6 解决办法 解决方法

phpStorm 软件打开运行提示 failed to create JVM的解决办法。 修改文件 D:\Program Files (x86)\JetBrains\PhpStorm 7.1.3\bin\PhpStorm.exe.vmoptions 把内存值改成标准值&#xff0c;文件全部内容如下&#xff1a; [plain] view plaincopy -server -Xms128m -Xmx512m -X…

maven jar包冲突常见报错及解决方法

见到如下错误&#xff0c;可以想到是不是jar包冲突 1.java.lang.NoSuchMethodError2.java.lang.ClassNotFoundException3.java.lang.NoClassDefFoundError解决办法 以一个错误为例&#xff1a;解决方法&#xff1a;1.首先定位到具体类。查到org.apache.httpHost对应的maven依赖…

[轉]如果把HTML當成飾品....

轉自:http://blog.onlyone.idv.tw/997.htm [轉]如果把HTML當成飾品.... 如果有一天&#xff0c;有個人把HTML做成耳環掛在耳朵上&#xff0c;那麼… 不過&#xff0c;在國外&#xff0c;就真的有人把這玩意拿出來賣了&#xff01; 在該購物網站的商品說明&#xff0c;還很KUSO這…

利用“栈”解决“出轨”问题

本图文利用“栈”的知识解决了“出轨”问题&#xff01;

a标签点击事件

οnclick"detail(this,${vo.id})" function detail(obj,id){ var lb $("#lb").val(); $(obj).attr("href","${rootUrl }app/wx/recipeOrder/getCoudetail?id"id"&lb"lb); document.location.hrefobj.href; }

maven依赖范围

其中依赖范围scope 用来控制依赖和编译&#xff0c;测试&#xff0c;运行的classpath&#xff08;注意是与classpath&#xff09;的关系. 主要的是三种依赖关系如下&#xff1a; 1.compile&#xff1a; 默认编译依赖范围。对于编译&#xff0c;测试&#xff0c;运行三种classpa…

'or'='or'经典漏洞原理分析

oror漏洞是一个比较老的漏洞了&#xff0c;主要是出现在后台登录上&#xff0c;利用这个漏洞&#xff0c;我们可以不用输入密码就直接进入系统的后台。它出现的原因是在编程时逻辑上考虑不周&#xff0c;同时对单引号没有进行过滤&#xff0c;从而导致了漏洞的出现。先给大家简…

第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)

前言 这部分也许是数据预处理最为关键的一个阶段。 如何对数据降维是一个很有挑战&#xff0c;很有深度的话题&#xff0c;很多理论书本均有详细深入的讲解分析。 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA)&#xff0c;并给出具体的实现步骤。 主成分分析法 - PCA 主…

Matlab编程与数据类型 -- 函数M文件的调用

本图文介绍了Matlab中函数M文件的调用方式。

直接依赖,间接依赖,可选依赖,排除依赖,依赖冲突

直接依赖 在本工程pom文件中配置的依赖&#xff0c;称为本工程的直接依赖。间接依赖 本工程pom配置了依赖A&#xff0c;A又依赖B&#xff0c;则本工程也依赖B&#xff0c;B为本工程的间接依赖。可选依赖 在依赖中配置<optional> true/false 是否向下传递&#xff0c;如果…

Windows 编程[9] - WM_CLOSE 消息

本例效果图:program Project1;usesWindows, Messages;{供 WM_CLOSE 消息调用的自定义过程} procedure OnClose(h: HWND); beginif IDOK MessageBox(h, 确认关闭吗?, 提示, MB_OKCANCEL) thenDestroyWindow(h); end;function WndProc(wnd: HWND; msg: UINT; wParam: Integer; …

Python自动化测试白羊座-week3切片+元组

name zcl,py,zyznames [zcl,py,zyz]print(names[0])print(names[0:2]) #切片就是从里面取几个元素, 从第几个取到第几个结束.取值时顾头不顾尾.print(names[1])#切片操作对字符串也适用name1[zcl,py,zyz]print(name1[2])num list(range(10)) #用range生成列表&#xff0c;需…

Matlab编程与数据类型 -- 函数M文件的组成

本图文介绍了Matlab中函数M文件的组成。

intellij idea 必知的debug功能

1.设置断点 选定要设置断点的代码行&#xff0c;在行号的区域后面单击鼠标左键即可。 2.开启调试会话 点击红色箭头指向的小虫子&#xff0c;开始进入调试。 IDE下方出现Debug视图&#xff0c;红色的箭头指向的是现在调试程序停留的代码行&#xff0c;方法f2()中&#xff0c;程…

Lession 15 Good news

1 语法:直接引语;间接引语; 直接引语:用引号"" 直接把要说的话引起来; l am busy, he said. 间接引语:转述说话人的话; He said that he is busy. 间接引语:1>陈述句,say,tell,来转述,人称,时态,指示代词,时间状语,地点状语…

使用HTML5监測站点性能

在这个信息爆炸的互联网时代&#xff0c;越来越多的人缺少了等待的耐心。站点性能对于一个站点来说越来越重要。下面为监控到的站点打开时间对跳出率的影响&#xff1a; 当站点打开时间在0-1秒时&#xff0c;跳出率为12% 当站点打开时间在1-2秒时&#xff0c;跳出率为26% 当站点…

Matlab编程与数据类型 -- 单元数组

Matlab编程与数据类型 – 单元数组