• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#算法之大牛生小牛的问题高效解决方法

C#算法之大牛生小牛的问题高效解决方法

作者:Robin 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Robin 通过本文主要向大家介绍了c#大牛,算法大牛,小牛大牛区别,兰博基尼小牛和大牛,大牛舔小牛打一成语等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

问题:
  一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问20年后共有牛多少只?
思路:
  这种子生孙,孙生子,子子孙孙的问题,循环里面还有循环的嵌套循环,一看就知道是第归问题。
于是乎,第一个版本出现:

public long Compute1(uint years)
{
  //初始化为1头牛
  long count = 1;
  if (years <= 3)
  {
    return count;
  }
  int i = 4;
  while (i <= years)
  {
    int subYears = i - 3;
    count += Compute1((uint)(subYears));
    i++;
  }
  return (long)count;
}
</div>

  可是这种循环在循环的做法可要把cpu老兄累坏了,你不信输入一个100年测试一下上面的方法,我等了半天,都没结果,改进一下吧,老牛(牛魔王)和小牛(红孩儿,奶奶的串种了),具有相同的生育能力,他们的生育曲线是一样的,所以小牛可以复用老牛的生育经验亚,这样就解决了重复计算一只牛第n年的时候一共生多少只的问题了,当年龄比较大的时候,明显大大降低cpu的运算次数,下面是基于这种思路的算法

Hashtable table = new Hashtable();
public long Compute(uint 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((uint)(subYears));
    }
    if (!table.ContainsKey(subYears))
    {
      table.Add(subYears, count);
    }
    i++;
  }
  return (long)count;
}

</div>

用测试程序测试一下上面的推论吧,结果如下:

1)当输入years比较小的时候,第一种方法耗时短,但两者的时间基本在一个数量级上
2)当输入years比较大的时候,比如40以上的,第二种算法比第一种性能比在100以上,而且输入years越高,性能比越悬殊。

测试结果截图:

20年

/UpFiles/2017/5/28/2016061609491722.jpg

50年

/UpFiles/2017/5/28/2016061609491723.jpg

源程序以及测试程序:http://xiazai.weikejianghu.com/201606/yuanma/HowMoneyCows(weikejianghu.com).rar

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#算法之大牛生小牛的问题高效解决方法
  • C#算法之关于大牛生小牛的问题

相关文章

  • 2017-05-28C#与Java的MD5简单验证(实例代码)
  • 2017-05-28C#动态生成按钮及定义按钮事件的方法
  • 2017-05-28Question:基于C#连续赋值的面试题(解答)
  • 2017-05-28openfiledialog读取txt写入数据库示例
  • 2017-05-28C#实现单链表(线性表)完整实例
  • 2017-05-28visio二次开发--判断文档是否已发生变化(变化就加星号*)
  • 2017-05-28c#动态编译执行对象方法示例 运用映射机制创建对象
  • 2017-05-28设置C#窗体程序只能启动一次
  • 2017-05-28将DataTable转换成List&lt;T&gt;实现思路及示例代码
  • 2017-05-28.NET程序页面中,操作并输入cmd命令的小例子

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现随机洗牌的方法
    • 关于C# Math 处理奇进偶不进的实现代码
    • C#操作word的方法示例
    • C#使用委托的步骤浅析
    • C#中is与as的区别分析
    • C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】
    • C#正则表达式获取下拉菜单(select)的相关属性值
    • c# winform读取xml文件创建菜单的代码
    • C#中Html.RenderPartial与Html.RenderAction的区别分析
    • C#实现窗口之间的传值

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有