算法编程(Java)#母牛生小牛的问题【字节】

题目描述

母牛从3 -7 岁初每年会产生1头小牛,10岁以后死亡(10岁存活)。假设初始有1投刚出生的母牛,请问第n年有多少头牛?(从第一年起计数)

注:第三年初会出生 第一头母牛,故第三年有两头母牛。

第五年初,第三年出生的母牛会生产,故第五年有五头母牛。

岁数是虚数

输入输出

  • 输入年数n
  • 输出牛数

第一年有1头牛
第二年有1头牛
第三年将出生一头牛,故有2头牛
第四年将出生一头牛,故有3头牛
第五年…,故有5头牛
第12年…,故有123头牛

思路

  • 创建一个牛的对象,属性只有年龄
  • 创建一个集合类,用来存放牛对象
  • 遍历这个集合
  • 判断牛是否生育,可以的话就再集合中加入一个对象
  • 判断牛是否死亡,死亡就从集合中移除,否则年龄加一
  • 输出集合中对象的数目

踩过的坑

代码

package com.xp;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        //输入所要计算的年
        Scanner sc = new Scanner(System.in);
        //测试用 存放每只牛的年龄
        List<Integer> rm = new ArrayList<>();
        //定义一个集合存放牛的数量
        List<Animal> m = new ArrayList<>();
        m.add(new Animal(1));
        //判断查询哪一年的数量
        int n = sc.nextInt();
        for(int i = 1;i<= n;i++){

            for(int j = 0 ;j < m.size();j++){
                Animal animal = m.get(j);
                //看看牛是否可以生育
                if(animal.getAge()>= 3 && animal.getAge()<=7){
                    m.add(new Animal(1));
                }
                //判断牛是否死亡
                if(animal.getAge()==10){
                    m.remove(j);
                }else {
                    //年龄加
                    animal.setAge(animal.getAge() + 1);
                }
            }
            rm.add(m.size());
            //测试用输出当年牛的年龄
//            if(i==n){
//                Iterator it = m.iterator();
//                while (it.hasNext()) {
//                    Animal animal = (Animal)it.next();
//                    System.out.println(animal.getAge()-1);
//                }
//            }
        }

        //输出牛的数量
        System.out.println(m.size());
    }


}
//定义母牛这个类
 class Animal{
    private int age;

    public Animal(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}








  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值