农场与母牛_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 农场与母牛

农场与母牛

 2010/12/25 0:04:35  贫僧不吃肉  http://never-say-never.javaeye.com  我要评论(0)
  • 摘要:今天看马士兵老师的视频,看见了一个有点意思的面试题,农场与母牛题目是这样的:农场一头小母牛,母牛五岁产母牛,每年生头小母牛,二十年有多少牛。看到此题,我的第一反应就是递归啊、函数什么的。接着老师说了一句:“请不要先把思维陷入到算法里,先用面向对象的思维来考虑……”。这时,我才突然反应过来,我的面向过程思维根深蒂固,面向对象思维还需加强呐!同时,由于换了个思维,所以这道题也勾起了我的兴趣,于是着手实现起来…importjava.util.Vector;publicclassFarm
  • 标签:

今天看马士兵老师的视频,看见了一个有点意思的面试题,农场与母牛

?

题目是这样的:

?

农场一头小母牛,

?母牛五岁产母牛,

?每年生头小母牛,

?二十年有多少牛。

?

看到此题,我的第一反应就是递归啊、函数什么的。接着老师说了一句:“请不要先把思维陷入到算法里,先用面向对象的思维来考虑……”。 这时,我才突然反应过来,我的面向过程思维根深蒂固,面向对象思维还需加强呐!同时,由于换了个思维,所以这道题也勾起了我的兴趣,于是着手实现起来

?

?

import java.util.Vector;

 

public class Farm {

 

    private Vector<Cow> cows=new Vector();   //农场的牛群,用vector盛放

       private int count=0;              //农场的总牛数

       

    //得到总牛数

       public int getCount() {

               count=cows.size();

               return count;

       }

       

    //增加一头牛

       public void addCow(){

              this.cows.addElement(new Cow());

       }

       

//农场进入下一年,满了5岁的牛就产崽并长一岁,没满的就只长一岁     

public void nextYear(){

              Cow c=new Cow();

              int before=cows.size();

              for(int i=0;i<before;i++){

                     c=cows.elementAt(i);

                     if(c.getAge()>=5){

                            c.grow();

                            c.lay(this);                 

                     }

                     else{

                            c.grow();

              }

       }

       }

       

   //为了显示方便,我就直接把main写在Farm类里面了

       public static void main(String [] args){

       

              Farm farm=new Farm();

              farm.addCow();

 

              for(int i=1;i<=20;i++){ 

                 farm.nextYear();

                  System.out.println("第 "+i+"年有牛 :"+farm.getCount());

              }

                            

       }

}

 

?

?

?

//母牛类

public class Cow {

       private int age;

       

       public Cow(){

              this.age=0;

       }

 

       public void grow(){

              this.age++;

       }

       

       public int getAge(){

              return age;

       }

       

       

       public void lay(Farm f){

                     f.addCow();

       }

}

??

?

?

?

输出结果:

第 1年有牛 :1

第 2年有牛 :1

第 3年有牛 :1

第 4年有牛 :1

第 5年有牛 :1

第 6年有牛 :2

第 7年有牛 :3

第 8年有牛 :4

第 9年有牛 :5

第 10年有牛 :6

第 11年有牛 :7

第 12年有牛 :9

第 13年有牛 :12

第 14年有牛 :16

第 15年有牛 :21

第 16年有牛 :27

第 17年有牛 :34

第 18年有牛 :43

第 19年有牛 :55

第 20年有牛 :71

?

?

?

?

?

?

在纸上推了一下,貌似是对的。

?

?

题目不难,但是有一些细节如果没注意的话,还是会很恼人,牛是在第5岁的时候产下崽还是第6岁的时候把崽产下来,比如刚生下来的崽是0岁而不是1岁,对象的引用,等。

?

所以,虽然简单,也还是花了我一些时间的~ 在这里放出来,除了是为了留给我以后回忆和供其他爱好者学习之外,同时也是为了抛砖引玉,希望看到有人提出更好的解决模式或者指出我设计得不好的地方,在交流中进步嘛~~

  • 相关文章
发表评论
用户名: 匿名