在 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()+" 頭牛");}}