JAVA实现25年后农场牛数量的问题

昨天面试一家游戏开发公司,有一道面试题特别有意思,但是当时没有写出来,回来仔细研究后终于写出来了!所以分享一下!

题目:

一只牛4岁开始生产,12岁停止生产,一年产1头,产下的母牛概率为50%,15岁送入屠宰场,现有一只1岁母牛,请问25年后有多少只牛?

当时看到面试题上有之前面试的人写的“递归”两个字,然后...就入坑了,回来仔细研究后发现根本跟递归就没有一毛钱关系!

下面贴出我自己写出的代码:

牛的实现类及方法:

package entity;

import java.util.Random;

/**
 * 牛
 * @author 土豆丝
 * @date 2018年5月15日
 *
 */
public class Cattle {

    /**
     * 性别(0:母牛 1:公牛)
     */
    public int sex;
    
    /**
     * 年龄
     */
    public int age;
    
    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    
    @Override
    public String toString() {
        return "Cattle [sex=" + sex + ", age=" + age + "]";
    }

    /**
     * 生产
     */
    public Cattle production(Cattle cattle){
        if(cattle.getSex()==0 && 4<cattle.getAge() && cattle.getAge()<=14){
            Random rand = new Random();
            Cattle c = new Cattle();
            if(rand.nextInt(100)>50){
                c.sex = 1;
            }
            c.age = 1;
            return c;
        }
        return null;
    }
    
    /**
     * 死亡
     */
    public Boolean die(Cattle cattle){
        if(cattle.age >= 20){
            return true;
        }
        return false;
    }
}

执行:

package main;

import java.util.ArrayList;
import java.util.List;

import entity.Cattle;

/**
 * 牛
 * @author 土豆丝
 * @date 2018年5月15日
 *
 */
public class run {

    public static void r(){
        //创建母牛
        Cattle c = new Cattle();
        c.setAge(1);
        c.setSex(0);
        //储存牛的集合
        List<Cattle> lc = new ArrayList<Cattle>();
        //将母牛放入牛的集合
        lc.add(c);
        for(int i=0;i<26;i++){
            for(int j=0;j<lc.size();j++){
                //生产方法
                Cattle ca = c.production(lc.get(j));
                //如果牛符合生产要求
                if(ca != null){
                    lc.add(ca);
                }
                //牛符不符合进入屠宰场的要求
                Boolean b = c.die(lc.get(j));
                if(b){
                    lc.remove(j);
                }else{
                    lc.get(j).setAge(lc.get(j).getAge()+1);
                }
            }
        }
        System.out.println("农场中牛的数量:"+lc.size());
    }
    
    public static void main(String[] args) {
        //执行
        r();
    }
}

结论:这道题考察的是对面向对象的理解,如果对面向对象理解较为深入的话这道题应该就是小玩意!这道题应该还有更加简洁,更加有效率的解决方案,求大佬回复我!本人QQ:2367908901   在此谢过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值