母牛生小牛问题-字节跳动笔试题
题目
母牛从3-7岁初每年会生产1头母牛,10岁后死亡(10岁仍然存活)。假设初始有1头刚出生的母牛,请问第n年有多少头母牛?(年从第一年开始计数)
注:
第3年初会出生第一头牛,故第3年有两头母牛
第5年初第3年出生的牛会生产,故第五年有5头母牛。
题解(暴力算法)
主类
public static void main(String[] args) {
for(int i = 1; i <= 20; i++){
System.out.println("第"+i+"年:"+cowList.getAccount(i)+"只");
}
}
算法类
public class CowList1 {
// 小牛集合
List<Integer> list;
public CowList1() {
}
/**
* 获取第n年的小牛
* @param year
*/
public int getAccount(int year){
if(year == 1 || year == 2){
return 1;
}
// 初始化为一头小牛,年龄为2岁
list = new ArrayList<>();
list.add(2);
for(int i = 3; i <= year; i++){
calulateAccount();
}
return list.size();
}
/**
* 判断每年小牛的生死情况
*/
private void calulateAccount(){
//新生小牛集合
List<Integer> newCows = new ArrayList<>();
// 遍历小牛
for(int i = 0; i < list.size(); i++){
// 新的一年长大一岁
list.set(i,list.get(i)+1);
Integer cowAge = list.get(i);
// 3-7岁生下一头小牛
if(cowAge >= 3 && cowAge <= 7){
newCows.add(1);
// 大于十岁小牛死亡
}else if(cowAge > 10){
list.remove(i);
i--;
}
}
list.addAll(newCows);
}
}