母牛每年都有一头小牛。小牛在2年内成为一头牛,从一头牛开始,我们必须计算N年中有多少只动物。
假设没有牛死...
例如在N = 5时:
第一头母牛给了2头犊牛(2岁时1头在3岁时换了另一只,然后在4,时再降到5)
总共= 4头犊牛
现在第一头母牛也已经3岁了(她在2岁时生了一头小牛,在3岁时又生了一头小牛)
总数= 2小牛。
第二头母牛也必须是2岁,所以她刚生下另一头小牛
总计= 1小腿。
总和= 1 + 4 + 2 + 1
递归随着年份的增加而继续
我最近在考试中遇到了这个问题。
我尝试使用递归,我只是一个初学者,但我做得不好。
public static void main(String args[]) {
Scanner sc =new Scanner(System.in);
int n= sc.nextInt();
sc.close();
fun(n);
}
public static void fun(int age) {
int arr[] = new int[age-1];
int temp=0, sum=1;
for(int i=age-2; i>=0; i--){
arr[temp++]=i;
}
sum+=arr.length;
for(int j=0; j<age-1; j++) {
if(arr[j]>=2) {
fun(j);
}
}
System.out.println(sum);
}
最佳答案
你可以试试看。它不是递归的(这是一个严格的要求吗?),但是它可以正确回答:
import java.util.ArrayList;
import java.util.List;
public class Bovines {
private static final class Bovine {
private final int birthYear;
public Bovine(final int birthYear) {
this.birthYear = birthYear;
}
public boolean isCow(final int year) {
return (year - this.birthYear) >= 2;
}
}
public static void main(final String[] args) throws Exception {
final List<Bovine> bovineList = new ArrayList<>();
/**/ bovineList.add(new Bovine(0)); // (initial Calf)
for (int year=0; year <= 5; year++) {
/*
* Iterate over a copy of the List to avoid any parallel-update issues...
*/
for (final Bovine bovine : new ArrayList<>(bovineList)) {
if (bovine.isCow(year)) {
bovineList.add(new Bovine(year)); // (Cow has Calf)
}
}
System.out.println("Year.: " + year + " Total: " + bovineList.size());
}
}
}