2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ?
福哥答案2021-02-04:

举例:
N=6,第1年1头成熟母牛记为a;
第2年a生了新的小母牛,记为b,总牛数为2;
第3年a生了新的小母牛,记为c,总数为3;
第4年a生了新牛d,总数4;
第5年b成熟了,ab分别生了一只,总数为6;
第6年c也成熟了,abc分别生了一只,总数为9,故返回9.

递推式是f(n)=f(n-1)+f(n-3)。

如果某个递归,除了初始项之外,具有如下的形式:
F(N) = C1 * F(N) + C2 * F(N-1) + … + Ck * F(N-k) ( C1…Ck 和k都是常数)。
并且这个递归的表达式是严格的、不随条件转移的。那么都存在类似斐波那契数列的优化,时间复杂度都能优化成O(logN)。

代码用golang编写,代码如下:

package mainimport "fmt"func main() {fmt.Println(c3(6))
}
func c3(n int) int {if n < 1 {return 0}if n == 1 || n == 2 || n == 3 {return n}base := [][]int{{1, 1, 0},{0, 0, 1},{1, 0, 0}}res := matrixPower(base, n-3)return 3*res[0][0] + 2*res[1][0] + res[2][0]
}//矩阵的p次方
func matrixPower(m [][]int, p int) [][]int {mLen := len(m)m0Len := len(m[0])res := make([][]int, mLen)for i := 0; i < mLen; i++ {res[i] = make([]int, m0Len)}for i := 0; i < mLen; i++ {res[i][i] = 1}tmp := mfor ; p != 0; p >>= 1 {if p&1 != 0 {res = muliMatrix(res, tmp)}tmp = muliMatrix(tmp, tmp)}return res
}//两个矩阵相乘
func muliMatrix(m1 [][]int, m2 [][]int) [][]int {m1Len := len(m1)m20Len := len(m2[0])m2Len := len(m2)res := make([][]int, m1Len)for i := 0; i < m1Len; i++ {res[i] = make([]int, m20Len)}for i := 0; i < m1Len; i++ {for j := 0; j < m20Len; j++ {for k := 0; k < m2Len; k++ {res[i][j] += m1[i][k] * m2[k][j]}}}return res
}

执行结果如下:


答案参考左神的java代码
评论

2021-02-04:第一年农场有1只成熟的母牛A,往后的每年:①每一只成熟的母牛都会生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永远不会死 。请问N年后牛的数量是多少 ?相关推荐

  1. 2021.02.04 Visual QA论文阅读

    目录 [2016][CVPR] Where To Look: Focus Regions for Visual Question Answering [2016][CVPR] Yin and Yang ...

  2. 2021.02.04——用爬虫爬取nga ow区1-10页的帖子并生成词云图

    前言 最近在学习爬虫的相关知识,思考做一个案例,平常nga ow区逛的也挺多,就爬取一下前10页帖子的标题,并以此生成词云图吧! 查阅相关链接 词云的简单实现 爬取网站多页数据实现方法 静态爬取方法 ...

  3. Java算法题:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛

    对于"到第4年可生育",我的理解是和不死神兔的"从出生后第3个月起每个月都生一对兔子 "意思相似,每代新生母牛 3 年后开始生育,不是4年后开始生育(我看过很多 ...

  4. 2021.01.04 第 1 个工作日反思

    2020.1.4 是上班族 2021 年的第一个工作日. 感觉 2020 年过去很快 . 反思了一下自己的OKR: 2020 年的OKR 有一些未完成的项,但在Q4 OKR有了一些实质性的进展 . 原 ...

  5. 【财经期刊FM-Radio|2021年04月14日】

    title: [财经期刊FM-Radio|2021年04月14日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 美债收益率回落,特斯拉涨超8%力挺标普创新高,比特币首破6.3万美元 ...

  6. 【364天】跃迁之路——程序员高效学习方法论探索系列(实验阶段122-2018.02.04)...

    实验说明 从2017.10.6起,开启这个系列,目标只有一个:通过探索新的学习方法,用2年的时间,实现2.5倍速的成长,获得普通程序员>= 5年的技术水平. 实验期2年(2017.10.06 - ...

  7. 【每日一知】带你走近5nm芯片 (2021.02.05 )

    [每日一知]带你走近5nm芯片 (2021.02.05 ) [每日一知]带你走近5nm芯片 (2021.02.05 ) ==一.简介== ==二.优势== ==三.现状== ============= ...

  8. deepin Java开发环境搭建和主力使用体验(2021.02更)

    前言: 之所以想体验一下deepin有2点原因 1.美观(是的,没错,就是冲着好看去的)2.流畅(主要是一些编程软件比win下反应更快,体验更好) 成果: 1.UI整体风格我觉得OK(基本不用动手美化 ...

  9. 【每日一知】什么是内聚和耦合? (2021.02.02 )

    [每日一知]什么是内聚和耦合? (2021.02.02 ) 一.简单了解 内聚(Cohesion) 是一个模块内部各成分之间相关联程度的度量. 耦合(Coupling) 是模块间 依赖程度的度量. 内 ...

最新文章

  1. Exchange Server 2010安装
  2. ubuntu字符界面login_Ubuntu字符界面输入密码始终提示错误 login incorrect 解决办法...
  3. Java中windows路径转换成linux路径等工具类
  4. Android Nougat 有望本月到来:支持手动曝光调节
  5. 【小题目】写JAVA程序时可以创建一个名为123.java的源文件吗
  6. 【图像处理】——比特平面原理和实现方法(全网较全面,含所有比特位图的分层方法)
  7. thinkphp3.2自定义success及error跳转页面
  8. php 输入汉字自动带出拼音和英文
  9. 分布式定时任务框架选型,写得太好了!
  10. (二)html常用标签
  11. Simulink与Flightgear的倾转旋翼联合仿真
  12. 有道云笔记分享_原来分享可以更美的 有道云笔记分享功能优雅变身
  13. x是小于9的非负数的matlab,x是小于10的非负数”,用MATLAB表达式可写为
  14. 算法基础篇-05-排序-LowB三人组(冒泡/选择/插入排序)
  15. 访问文件或图片报403的处理方式
  16. 新能源汽车智能化,集度先行一步
  17. 单价数量和总价的公式_小学数学基础公式:单价数量总价公式(十二)
  18. 读书笔记_002 甘于平凡而不甘于平凡的腐烂——《平凡的世界》所感
  19. Hello World---kodu少儿编程第四天
  20. QQ表情包,动态的那种

热门文章

  1. 程序中说的挂起是什么意思
  2. Uniapp 截图 适用于APP
  3. 设置钉钉小程序里面表格的宽度
  4. 【Drone】航模遥控系统各协议简介
  5. python 管理 交换机_Python管理Cisco交换机
  6. python修改下载源_修改python的pip下载源
  7. 强化学习笔记(一)马尔可夫决策过程
  8. 《分销商开发、维护与管理》--王越老师
  9. 霸三国ol服务器维护,霸三国OL开发者爆料第二弹 技能组合多样化
  10. 电阻的作用有哪些?(超全)