面試題:農夫養牛問題

 今天在一個QQ羣中,有人說到這個一個面試題:html

一頭母牛在3—10歲的時候每一年能夠生一頭小牛,生公牛和母牛的比率是50%,在牛12歲的時候就送入屠宰場買了。如今有一個農夫有1頭1歲大的母牛,在母牛3歲的時候就送到附近的農場去配種,請問40年後這個農夫可能會有多少頭牛,寫出相關的代碼或答題思路,最好用面向對象。java

polaris將代碼(Java實現)寫了一下,若有不對的地方歡迎指出。同時也歡迎您給出本身的解法。面試

 

    
    
             
    
    
  1. package com.polaris.test; 
  2.  
  3. import java.util.*; 
  4.  
  5. /** 
  6.  * 問題描述: 
  7.  *  
  8.  * 一頭母牛在3—10歲的時候每一年能夠生一頭小牛,生公牛和母牛的比率是50%, 
  9.  * 在牛12歲的時候就送入屠宰場買了。如今有一個農夫有1頭1歲大的母牛, 
  10.  * 在母牛3歲的時候就送到附近的農場去配種,請問40年後這個農夫可能會有多少頭牛, 
  11.  * 寫出相關的代碼或答題思路,最好用面向對象。 
  12.  * @author polaris http://www.beijixing001.com 
  13.  * @version 1.0 
  14.  */ 
  15. public class ComputeCattleNum { 
  16.      
  17.     // 保存全部母牛 
  18.     private static List<Cattle> cows = new ArrayList<Cattle>(); 
  19.      
  20.     // 保存全部當前農夫擁有的牛 
  21.     private static List<Cattle> cattles = new ArrayList<Cattle>(); 
  22.      
  23.     public static void main(String[] args) { 
  24.         // 第一頭母牛 
  25.         Cattle cow = new Cattle(0,3); 
  26.         cows.add(cow); 
  27.          
  28.         // 40年 
  29.         for(int i=0;i<40;++i) { 
  30.             // 大於等於12歲的牛送到屠宰場賣掉;同時每一年,全部的牛 
  31.             for(int j=0;j<cattles.size();++j) { 
  32.                 Cattle temp = cattles.get(j); 
  33.                 if(temp.getDead()) { 
  34.                     cattles.remove(temp); 
  35.                 } 
  36.                  
  37.                 // 開始只有一頭母豬,年齡不生長 
  38.                 if(i>0) { 
  39.                     cattles.get(j).grow(); 
  40.                 } 
  41.             } 
  42.              
  43.             // 母牛生小牛 
  44.             for(int j=0;j<cows.size();++j) { 
  45.                 Cattle calf = cows.get(j).bear(); 
  46.                 if(calf!=null) { 
  47.                     if(calf.getSex()==0
  48.                         cows.add(calf); 
  49.                     cattles.add(calf); 
  50.                 } 
  51.             } 
  52.         } 
  53.          
  54.         System.out.println("40年後農夫擁有" + cattles.size() + "頭牛"); 
  55.     } 
  56.  
  57. class Cattle { 
  58.      
  59.     // 牛的雌雄:0表明雌,1表明雄 
  60.     private int sex; 
  61.     // 牛的年齡 
  62.     private int age; 
  63.     // 是否賣掉(已死) 
  64.     private boolean dead = false
  65.      
  66.     public Cattle(int sex, int age) { 
  67.         this.sex = sex; 
  68.         this.age = age; 
  69.     } 
  70.      
  71.     /** 
  72.      * 生小牛 
  73.      * @return 生出的小牛 
  74.      */ 
  75.     public Cattle bear() { 
  76.         Cattle calf = null
  77.         if(this.sex==0) { 
  78.             if(this.age>=3 && this.age<=10) { 
  79.                 calf = new Cattle(random(),0); 
  80.             } else { 
  81.                 //System.out.println("抱歉,此牛過小或太老,不能生育。"); 
  82.             } 
  83.         } else { 
  84.             //System.out.println("有沒有搞錯,公牛也想讓它生小牛?"); 
  85.         } 
  86.         return calf; 
  87.     } 
  88.      
  89.     private int random() { 
  90.         return (int)Math.round(Math.random()); 
  91.     } 
  92.      
  93.     /** 
  94.      * 長大一歲,若是當前大於等於12歲,則賣掉 
  95.      */ 
  96.     public void grow() { 
  97.         if(this.age>=12) dead = true
  98.         else this.age++; 
  99.     } 
  100.      
  101.     public int getSex() { 
  102.         return this.sex; 
  103.     } 
  104.      
  105.     public boolean getDead() { 
  106.         return this.dead; 
  107.     } 

 

點擊此處得到ComputeCattleNum.java類文件dom

相關文章
相關標籤/搜索