您的位置:首页 > 其它

一头小牛,小牛成长到第四年开始,会每年生一头小牛,N年后共有多少头牛

2013-06-21 23:17 323 查看
方法一:面向对象

public class Cow {
/*
* 一个农夫,买了一头小牛,这头小牛成长到第四年开始,会每年生一头小牛,
* 所出生的小牛成长到第四年开始,也会每年生一头小牛,请问N年后,农夫共有多少头牛
*
*/

private int age;

public Cow() {
// TODO Auto-generated constructor stub
age = 1;
}

//增加年龄
public void addAge() {
age ++;
}

//是否可以生产小牛
public boolean isCanBirth() {
return age >=4;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

int N=11;
List<Cow> list = new ArrayList<Cow>();
list.add(new Cow());

for (int i = 1; i <= N; i++) {

for (int j = 0; j < list.size(); j++) {
Cow cow =list.get(j);
if(cow.isCanBirth()){
list.add(new Cow());
}

cow.addAge();
}
System.out.println("第"+i+"年,牛的数量" + list.size());
}

System.out.println(N + "年后,牛的数量:"+ list.size());
}

}


第1年,牛的数量1

第2年,牛的数量1

第3年,牛的数量1

第4年,牛的数量2

第5年,牛的数量3

第6年,牛的数量4

第7年,牛的数量6

第8年,牛的数量9

第9年,牛的数量13

第10年,牛的数量19

第11年,牛的数量28

11年后,牛的数量:28

方法二:递归

public static void main(String[] args) {
// TODO Auto-generated method stub

int N=11;

long num =new Cow().fun(N);
System.out.println(N + "年后,牛的数量:"+num);
}

public long fun(int n) {
long num=0;
if(n==1 || n==2 || n==3){
num=1;
}else{
num = fun(n-3)+fun(n-1);//今年小牛总数量=今年新生的小牛+去年小牛的数量
}

return num;
}


方法三:递归

private static int sum =1;
public static void main(String[] args) {
// TODO Auto-generated method stub
int N=11;
new Cow().fun(N);

System.out.println(N + "年后,牛的数量:"+sum);

}

public void  fun(int n){

int y = n-3;//父代可生的子代数量
if(y>0){
sum = sum +y;
for(int i=0;i<(y-1);i++){//子代可生子代的数量
fun(n-(3+i));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐