版权声明:作者:xp_9512 来源:CSDN 版权声明:本文为博主原创文章,转载请附上博文链接! 原文: https://blog.csdn.net/qq_40981804/article/details/89839746
题目描述
母牛从3 -7 岁初每年会产生1头小牛,10岁以后死亡(10岁存活)。假设初始有1投刚出生的母牛,请问第n年有多少头牛?(从第一年起计数)
注:第三年初会出生 第一头母牛,故第三年有两头母牛。
第五年初,第三年出生的母牛会生产,故第五年有五头母牛。
岁数是虚数
输入输出
- 输入年数n
- 输出牛数
第一年有1头牛
第二年有1头牛
第三年将出生一头牛,故有2头牛
第四年将出生一头牛,故有3头牛
第五年…,故有5头牛
第12年…,故有123头牛
思路
- 创建一个牛的对象,属性只有年龄
- 创建一个集合类,用来存放牛对象
- 遍历这个集合
- 判断牛是否生育,可以的话就再集合中加入一个对象
- 判断牛是否死亡,死亡就从集合中移除,否则年龄加一
- 输出集合中对象的数目
踩过的坑
- 遍历集合时不要用迭代器,否则会报修改异常
java.util.ConcurrentModificationException
代码
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;
}
}