当前位置: 首页 > news >正文

数据结构-返回n年后牛的数量

第一年农场有1只成熟的母牛A,往后的每年:

  1. 每一只成熟的母牛都会生一只母牛
  2. 每一只新出生的母牛都在出生的第三年成熟
  3. 每一只母牛永远不会死

返回N年后牛的数量。

抽象公式就是 F(N) = F(N-1) + F(N-3).
矩阵公式:
|F4, F3, F2| = |F3,F2,F1| * 3阶矩阵
|F5, F4, F3| = |F4,F3,F2| * 3阶矩阵
|F6, F5, F4| = |F5,F4,F3| * 3阶矩阵
通过3个公式求出3阶矩阵

public class FibonacciProblem {public static void main(String[] args) {// 1,1,2,3,5,8,13int n = 19;System.out.println(c1(n));System.out.println(c3(n));}// 递归解public static int c1(int n){if (n < 0){return 0;}if (n == 1 || n == 2 || n == 3){return n;}return c1(n-1) + c1(n-3);}// 矩阵解public static int c3(int n){if (n < 1){return 0;}if(n == 1 || n == 2){return 1;}int[][] base = {{1,1,0},{0,0,1},{1,0,0}};int[][] res = matrixPower(base, n-3);//|F3,F2,F1| * (3阶矩阵的n-3次方)return 3*res[0][0] + 2*res[1][0] + res[2][0];}public static int[][] matrixPower(int[][] m, int p){int[][] res = new int[m.length][m[0].length];for (int i = 0; i < res.length; i++) {res[i][i] = 1; // 对角线}// res=矩阵中的1int[][] t = m; // 矩阵1次方for (; p != 0; p >>= 1){if((p&1) != 0){res = mulMatrix(res, t);}t = mulMatrix(t,t);}return res;}// 两个矩阵相乘.  第一个矩阵的行数等于第二个矩阵的列数public static int[][] mulMatrix(int[][] m1, int[][] m2){int res[][] = new int[m1.length][m2[0].length];for (int i = 0; i < m1.length; i++) {for (int j = 0; j < m2[0].length; j++) {for (int k = 0; k < m2.length; k++) {res[i][j] += m1[i][k] * m2[k][j];}}}return res;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MATLAB遗传算法求解考虑碳排放的逆向物流快递产品回收处理中心选址问题实例代码
  • 【Web】NepCTF 2024题解
  • Java面试题·解释题
  • 笔记本电脑数据恢复的最佳解决方案 - 100%快速和安全
  • 深度全面讲解fs.readFileSync:Node.js中的同步文件读取
  • 准备pyannote-audio开发环境
  • 49、Python之模块和包:模块导入对命名空间的影响
  • MessageDialog 是 Qt Quick Controls 中的一个组件,用于显示消息对话框
  • 解锁C#性能监控:内置性能计数器全解析
  • 结构型模式之代理模式
  • Python习题 148:返回每个单词长度的列表
  • K8s之自动扩缩容
  • 【Python脚本】爬取网络小说
  • 谷歌、火狐及Edge等浏览器中实现allWebPlugin中间件自动安装及升级
  • docker基本环境搭建
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Angular2开发踩坑系列-生产环境编译
  • CSS 专业技巧
  • ECS应用管理最佳实践
  • EventListener原理
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • opencv python Meanshift 和 Camshift
  • Webpack 4x 之路 ( 四 )
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 解决iview多表头动态更改列元素发生的错误
  • 聊一聊前端的监控
  • 前端技术周刊 2019-02-11 Serverless
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 入口文件开始,分析Vue源码实现
  • 用Python写一份独特的元宵节祝福
  • 怎样选择前端框架
  • 最近的计划
  • ionic入门之数据绑定显示-1
  • (3)STL算法之搜索
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (PADS学习)第二章:原理图绘制 第一部分
  • (四)模仿学习-完成后台管理页面查询
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Sql Server 保留几位小数的两种做法
  • (转)关于pipe()的详细解析
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Core引入性能分析引导优化
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net FrameWork总结
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net操作Excel出错解决
  • ::什么意思
  • @Documented注解的作用
  • @RequestBody的使用
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • @test注解_Spring 自定义注解你了解过吗?
  • [.net]官方水晶报表的使用以演示下载
  • [20171113]修改表结构删除列相关问题4.txt