在 http://polaris.blog.51cto.com/1146394/399738 这里看到了一道数学题:
一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。
现在有一个农夫有1头1岁大的母牛,在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,
写出相关的代码或答题思路,最好用面向对象。
下面给出我自己写的代码,如果有不对的还请指正~
牛类,Cow.java:
package test.question.niu;
public class Cow {
int age;
char sex;//F母 M公
char childSex; //最近生下的孩子的性别
public Cow(int age,char sex){
this.age=age;
this.sex=sex;
}
public char getChildSex() {
return childSex;
}
public void setChildSex(char childSex) {
this.childSex = childSex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
农夫类,Farmer.java
package test.question.niu;
import java.util.ArrayList;
import java.util.List;
public class Farmer {
List<Cow> cowList = new ArrayList<Cow>();
public Farmer(){
Cow cow = new Cow(1,'F');
this.cowList.add(cow);
}
public void addCow(Cow cow){
this.cowList.add(cow);
}
}
测试类,Test.java
package test.question.niu;
import java.util.ArrayList;
import java.util.List;
/**
*
* 一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。
* 现在有一个农夫有1头1岁大的母牛,在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,
* 写出相关的代码或答题思路,最好用面向对象。
* */
public class Test {
public static void main(String args[]){
int year = 40;
Farmer farmer = new Farmer();
for(int i=1;i<=year;i++){
//每一年每头牛都增大一岁
for(int j=0;i!=1 && j<farmer.cowList.size();j++){
farmer.cowList.get(j).setAge(farmer.cowList.get(j).getAge()+1);
}
int size = farmer.cowList.size(); //牛群的数量
for(int j=0;j<size;j++){
Cow cow = farmer.cowList.get(j);
if(cow.getAge()>=3 && cow.getAge()<=10 && cow.getSex()=='F'){//满足条件才生小牛
//这里每头母牛交替生公牛、母牛,得到概率50%情况下的数值
//也可以用(int)Math.round(Math.random())来模拟概率事件,
char childSex = cow.getChildSex()=='F'?'M':'F';
cow.setChildSex(childSex); //记录最近生下的牛的性别
Cow newCow = new Cow(0,childSex);//刚生下来,0岁
farmer.cowList.add(newCow);
}else if(cow.getAge()>11){ //大于11岁,卖掉
farmer.cowList.remove(j);
}
}
}
System.out.println("40年后农夫拥有 "+farmer.cowList.size()+" 头牛");
}
}