代码编织梦想

母牛的故事【Java语言】

题目描述
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

样例输入
2
4
5
0
样例输出
2
4
6

思路:往后多推导几天的母牛数量,寻找规律,发现从第四年开始,本年母牛数量是前一年和前三年母牛数量之和,可用数组直接实现,也可用递归调用,但递归在数据量较大时非常耗时,需要谨慎使用

代码实现:

数组方法

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 题目:母牛的故事
 * 方法:用数组方法计算
 */
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        //创建list集合存放结果
        List<Integer> list = new ArrayList();
        while ((n = sc.nextInt()) != 0) {
            list.add(f(n));//调用函数计算出第n天的母牛数量
        }
        //输出结果
        for (Integer i : list) {
            System.out.println(i);
        }
    }

    //计算第n天的母牛数量的函数
    public static int f(int n) {
        int[] a = new int[56];
        for (int i = 0; i < n; i++) {
            if (i <= 3) {
                a[i] = i + 1;
                continue;
            }
            a[i] = a[i - 1] + a[i - 3];//本天母牛数等于前一天母牛数加前三天母牛数量
        }
        return a[n - 1];
    }
}

递归方法


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 题目:母牛的故事
 * 方法:递归
 */
public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n;
        //存放结果的集合
        List<Integer> list = new ArrayList();
        while ((n = sc.nextInt()) != 0) {
            list.add(f(n));
        }
        //输出结果
        for (Integer i : list) {
            System.out.println(i);
        }
    }

    //计算第n天的母牛数量的递归方法
    private static int f(int n) {
        //前三年小母牛不生崽
        if (n <= 3) {
            return n;
        } else {
            return f(n - 1) + f(n - 3);
        }
    }
}


题目链接: https://www.dotcpp.com/oj/problem1004.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_42240763/article/details/111106218

深度剖析Java集合之Stack-爱代码爱编程

一. Stack 初识 Java 集合框架提供了一个集合Stack,它提供了stack 数据结构的功能 1. stack 数据结构 栈是一种“后进先出”(LIFO)的线性数据结构,是一种特殊的线性表。 在栈中,元素的添加和删除操作只能在表的一端进行,即栈顶。元素的添加和删除遵循“后进先出”(LIFO)的原则,最后添加的元素总是最先出栈,栈对元素的访

Spring框架入门笔记-爱代码爱编程

1、什么是Spring? Spring是一款轻量级开源框架 IoC(Inverse Of Control:反转控制)通过配置的方式,将对象的管理控制权交给spring容器,spring得到具体的包路径,类路径通过反射的方式,创建对象。 AOP(Aspect Oriented Programming:面向切面编程),运行期通过动态代理方式,在方法的前后

第三天 —— 运算符-爱代码爱编程

种类及总览 算数运算符关系运算符逻辑运算符赋值运算符位运算符条件运算符字符串连接运算符其他运算符算数运算符 运算符:+、-、*、/、%、++、–重点掌握 ++ 和 --++ 可以出现在变量前,也可以出现在变量后++出现在变量后:会先做赋值运算,再自加一出现在变量前:会先自加一,在做赋值运算关系运算符 运算符:>、>=、<、&l

Leetcode 538 题 把二叉搜索树转换为累加树-爱代码爱编程

题目来源:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/ 个人公众号:小猿君的算法笔记 题目描述 给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和

为什么 HashMap 的加载因子是0.75?数学的运用!-爱代码爱编程

作者:sunnylovecmc 来源:https://blog.csdn.net/sunny243788557/article/details/109603806 有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75? 本文主要对以下内容进行

Sentinel-(二)普通限流、热点限流、集群流控、热点集群流控、系统自适应限流等参数详解-爱代码爱编程

前言:为了方便查询相关参数释义,故进行了收集  粘贴gitHub官方解释,部分内容有做补充 https://github.com/alibaba/Sentinel 目录          一、普通限流 二、热点限流  三、系统自适应限流 四、集群限流   一、普通限流 resource:资源名,即限流规则的作用对象count: 限流阈值 

Leetcode73. 矩阵置零(C++思路与代码)-爱代码爱编程

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 思路: 将每一行每一列的第一个元素设置为标识符,如果为0,那么表示这一行或者这一列有元素0。由于第

JZ59-按之字形顺序打印二叉树-爱代码爱编程

【题目描述】 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 示例 输入输出{8,6,10,5,7,9,11}[[8],[10,6],[5,7,9,11]]【队列】 /* struct TreeNode { int val; struc

1.4双向链表表示与实现-爱代码爱编程

1.4双向链表表示与实现 1、双向链表是指链表中每个结点都有两个指针域,一个指向后继结点,一个指向前驱结点。prior和next. 2、双向链表也分带头和不带头,带头操作更加方便。双向链表也有循环结构,称双向循环链表。 3、带头双向循环链表的判空条件为head->prior==head或head->next==head; 代码实现:

Leetcode 538 题 把二叉搜索树转换为累加树-爱代码爱编程

题目来源:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/ 个人公众号:小猿君的算法笔记 题目描述 给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和

为什么 HashMap 的加载因子是0.75?数学的运用!-爱代码爱编程

作者:sunnylovecmc 来源:https://blog.csdn.net/sunny243788557/article/details/109603806 有很多东西之前在学的时候没怎么注意,笔者也是在重温HashMap的时候发现有很多可以去细究的问题,最终是会回归于数学的,如HashMap的加载因子为什么是0.75? 本文主要对以下内容进行

Java实现七种【排序算法】+图解+完整代码+分析-爱代码爱编程

参考书目:《大话数据结构》 本文涉及的排序算法 一、冒泡排序(优化版)二、简单选择排序三、直接插入排序四、希尔排序五、堆排序六、归并排序(递归版)+归并排序(递归优化版)七、快速排序+快速排序(四度优化版)End.总结 一、冒泡排序(优化版) 0.基本思想:一种交换排序,两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录位置。