今天在一个QQ群中,有人说到这个一个面试题:

一头母牛在3—10岁的时候每年可以生一头小牛,生公牛和母牛的比率是50%,在牛12岁的时候就送入屠宰场买了。现在有一个农夫有1头1岁大的母牛,在母牛3岁的时候就送到附近的农场去配种,请问40年后这个农夫可能会有多少头牛,写出相关的代码或答题思路,最好用面向对象。

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类文件