今天在一個QQ羣中,有人說到這個一個面試題:html
一頭母牛在3—10歲的時候每一年能夠生一頭小牛,生公牛和母牛的比率是50%,在牛12歲的時候就送入屠宰場買了。如今有一個農夫有1頭1歲大的母牛,在母牛3歲的時候就送到附近的農場去配種,請問40年後這個農夫可能會有多少頭牛,寫出相關的代碼或答題思路,最好用面向對象。java
polaris將代碼(Java實現)寫了一下,若有不對的地方歡迎指出。同時也歡迎您給出本身的解法。面試
- package com.polaris.test;
- import java.util.*;
- /**
- * 問題描述:
- *
- * 一頭母牛在3—10歲的時候每一年能夠生一頭小牛,生公牛和母牛的比率是50%,
- * 在牛12歲的時候就送入屠宰場買了。如今有一個農夫有1頭1歲大的母牛,
- * 在母牛3歲的時候就送到附近的農場去配種,請問40年後這個農夫可能會有多少頭牛,
- * 寫出相關的代碼或答題思路,最好用面向對象。
- * @author polaris http://www.beijixing001.com
- * @version 1.0
- */
- public class ComputeCattleNum {
- // 保存全部母牛
- private static List<Cattle> cows = new ArrayList<Cattle>();
- // 保存全部當前農夫擁有的牛
- private static List<Cattle> cattles = new ArrayList<Cattle>();
- public static void main(String[] args) {
- // 第一頭母牛
- Cattle cow = new Cattle(0,3);
- cows.add(cow);
- // 40年
- for(int i=0;i<40;++i) {
- // 大於等於12歲的牛送到屠宰場賣掉;同時每一年,全部的牛
- for(int j=0;j<cattles.size();++j) {
- Cattle temp = cattles.get(j);
- if(temp.getDead()) {
- cattles.remove(temp);
- }
- // 開始只有一頭母豬,年齡不生長
- if(i>0) {
- cattles.get(j).grow();
- }
- }
- // 母牛生小牛
- for(int j=0;j<cows.size();++j) {
- Cattle calf = cows.get(j).bear();
- if(calf!=null) {
- if(calf.getSex()==0)
- cows.add(calf);
- cattles.add(calf);
- }
- }
- }
- System.out.println("40年後農夫擁有" + cattles.size() + "頭牛");
- }
- }
- class Cattle {
- // 牛的雌雄:0表明雌,1表明雄
- private int sex;
- // 牛的年齡
- private int age;
- // 是否賣掉(已死)
- private boolean dead = false;
- public Cattle(int sex, int age) {
- this.sex = sex;
- this.age = age;
- }
- /**
- * 生小牛
- * @return 生出的小牛
- */
- public Cattle bear() {
- Cattle calf = null;
- if(this.sex==0) {
- if(this.age>=3 && this.age<=10) {
- calf = new Cattle(random(),0);
- } else {
- //System.out.println("抱歉,此牛過小或太老,不能生育。");
- }
- } else {
- //System.out.println("有沒有搞錯,公牛也想讓它生小牛?");
- }
- return calf;
- }
- private int random() {
- return (int)Math.round(Math.random());
- }
- /**
- * 長大一歲,若是當前大於等於12歲,則賣掉
- */
- public void grow() {
- if(this.age>=12) dead = true;
- else this.age++;
- }
- public int getSex() {
- return this.sex;
- }
- public boolean getDead() {
- return this.dead;
- }
- }